Scala Future和Java Future之间有什么区别
Scala Future和Java Future之间是否存在任何概念,功能或机械差异?从概念上讲,我无法看到任何差异,因为它们都旨在为异步计算提供一种机制。Scala Future和Java Future之间有什么区别
java.util.concurrent.Future
的主要不便之处在于,您无法在没有阻塞的情况下获得该值。
事实上,检索值的唯一途径是get
方法,即(quoting from the docs)
如有必要,等待计算完成,然后获取其结果。
随着scala.concurrent.Future
你,而不是一个真正的无阻塞的计算,因为你可以将回调完成(成功/失败),或简单地在它和链的多个期货映射一起在一个一元的方式。长期以来,scala's Future允许异步计算,而不会阻塞比必要的更多的线程。
Java的未来:两个代表异步计算的结果,但Java的未来需要你通过阻止访问结果得到method.Although你可以叫isDone如果Java的未来找出在调用get之前已经完成,从而避免了任何阻塞,您必须等到Java Future完成之后才能继续使用结果的任何计算。
斯卡拉未来:您可以在新未来指定在斯卡拉未来它是否已完成或变换not.Each变换结果代表原始未来的异步结果通过功能转化。这使您可以将异步计算描述为一系列转换。
Scala的未来通常会消除,推理共享数据和锁的需要。当您调用Scala方法时,它会在“等待”时执行计算并返回结果。如果这个结果是一个未来,Future表示另一个计算要经常由一个完全不同的线程异步执行。
示例:代替阻塞然后继续进行另一个计算,您可以将下一个计算映射到未来。
随着未来将在10秒后完成:
val fut = Future { Thread.sleep(10000);21+21}
映射这个未来与加一将产生另一种未来的功能。
val result = fut.map(x=>x+1)
也许更准确地说,斯卡拉有一个更方便的api与未决期货和回调交互。我不确定与Java8 CompletableFuture的比较如何,尽管这不是标准执行者返回的结果。 – tkruse