2014-11-14 50 views
1

来自Java背景,我最近开始在我的工作所需的Scala编码。Runnable和Future在Scala之间有什么区别?

我已阅读the concurrency guide for Scala并知道如何使用未来来执行异步任务。

我想知道:

  1. 如果异步任务,我想执行没有返回值,是否有使用可运行提交给一个线程,并单独使用一个未来有什么区别?

  2. 与runnable相比未来的性能如何?还是我比较苹果和橙色?

+0

苹果橙色,是的。这两件事并非完全可以互换。 – biziclop

+0

@Duncan这正是我发生的事情。 :) – biziclop

+0

@Duncan有道理:) – user2829759

回答

3

Futurescala.concurrent.Future,不要与Scalaz中的问题混淆)使用下面的Runnable来实现 - 请参见PromiseCompletingRunnable。在很多方面,它只是一个包装,提供了很好的高级功能(特别是使用flatMap)。因此,行为和性能非常相似 - Future非常轻微性能比“原始”Runnable性能差,因为它涉及实例化更多的包装类,但在实践中,如果将来做任何事情,这不太可能会引起注意实际工作(特别是如果运行它涉及创建一个新线程)。如果您创建了Future[Unit]并将其丢弃,这与创建Runnable并将其提交给相同的ExecutionContext确实非常相似。

+0

我期待未来类似于runnable莫名其妙。是否有任何参考状态表明未来可以在下面使用?另外,如果它是一个封装的可运行的应用程序,将来如何实现返回值呢? – user2829759

+0

我没有任何参考,只是看标准库源。值通过'Promise'返回;当你创建一个Future时,实际的实现是1.创建一个Promise 2.创建一个PromiseCompletingRunnable来完成你给它的计算然后用它完成Promise 3.提交PromiseCompletingRunnable到'ExecutionContext' 4.返回'Promise'。 – lmm

相关问题