Scala Future和Java Future之间是否存在任何概念,功能或机械差异?从概念上讲,我看不出任何差异,因为它们都旨在提供异步计算机制。
答案 0 :(得分:33)
java.util.concurrent.Future
的主要不便之处在于,您无法在不阻止的情况下获取价值。
实际上,检索值的唯一方法是get
方法,即quoting from the docs)
如果需要等待计算完成,然后检索其结果。
使用scala.concurrent.Future
,您可以获得真正的非阻塞计算,因为您可以附加回调以完成(成功/失败)或简单地映射它并以多种方式将多个期货链接在一起。
长话短说,scala的Future允许异步计算,而不会阻塞超过必要的线程。
答案 1 :(得分:3)
Java Future :两者都代表异步计算的结果,但Java的 Future 要求您通过阻塞get方法访问结果。虽然您可以调用 isDone 在调用get之前确定 Java Future 是否已完成,从而避免任何阻塞,您必须等到Java Future完成后才能继续进行任何使用该结果的计算。< / p>
Scala Future :您可以在 Scala Future 上指定转换是否已完成。每次转换都会产生新的 Future 由函数转换的原始 Future 的异步结果。这允许您将异步计算描述为一系列转换。
Scala的未来经常消除,需要推理共享数据和锁定。当您调用Scala方法时,它会在“等待”时执行计算并返回结果。如果该结果是Future,则Future表示另一个通常由完全不同的线程异步执行的计算。
示例:您可以将下一次计算映射到未来,而不是阻止然后继续进行其他计算。
以后将在十秒后完成:
val fut = Future { Thread.sleep(10000);21+21}
使用递增1的函数映射此未来将产生另一个未来。
val result = fut.map(x=>x+1)