Scala中的Runnable和Future有什么区别?

时间:2014-11-14 09:35:15

标签: multithreading scala

来自Java背景,我最近开始编写Scala编码作为我的工作。

我已阅读the concurrency guide for Scala并了解如何使用future来执行异步任务。

我想知道:

  1. 如果我想要执行的异步任务没有返回值,那么使用提交给线程的runnable和单独使用未来之间有什么区别吗?

  2. 与runnable相比,未来的表现如何?或者我将苹果与橙子进行比较?

2 个答案:

答案 0 :(得分:3)

Futurescala.concurrent.Future,不要与Scalaz中的那个混淆)是使用下面的Runnable实现的 - 请参阅PromiseCompletingRunnable。在许多方面,它只是一个包装器,提供了很好的高级功能(特别是使用flatMap的组合)。所以行为和性能非常相似 - Future 如果将来做任何实际工作(特别是如果运行它涉及创建一个新线程),在实践中不太可能引人注意。如果您创建Runnable并将其丢弃,这与创建Future[Unit]并将其提交到同一Runnable的确非常相似。

答案 1 :(得分:1)

对于运行异步(它是monad)的东西,Future是'容器'。

因此,您将获得一个工具箱来处理计算结果/失败。

你读过这个:http://docs.scala-lang.org/overviews/core/futures.html吗?