来自Java背景,我最近开始编写Scala编码作为我的工作。
我已阅读the concurrency guide for Scala并了解如何使用future来执行异步任务。
我想知道:
如果我想要执行的异步任务没有返回值,那么使用提交给线程的runnable和单独使用未来之间有什么区别吗?
与runnable相比,未来的表现如何?或者我将苹果与橙子进行比较?
答案 0 :(得分:3)
Future
(scala.concurrent.Future
,不要与Scalaz中的那个混淆)是使用下面的Runnable
实现的 - 请参阅PromiseCompletingRunnable
。在许多方面,它只是一个包装器,提供了很好的高级功能(特别是使用flatMap
的组合)。所以行为和性能非常相似 - Future
如果将来做任何实际工作(特别是如果运行它涉及创建一个新线程),在实践中不太可能引人注意。如果您创建Runnable
并将其丢弃,这与创建Future[Unit]
并将其提交到同一Runnable
的确非常相似。
答案 1 :(得分:1)
对于运行异步(它是monad)的东西,Future是'容器'。
因此,您将获得一个工具箱来处理计算结果/失败。
你读过这个:http://docs.scala-lang.org/overviews/core/futures.html吗?