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