Scala Future和Java Future有什么区别。

2022-09-02 03:02:34

Scala Future和Java Future之间是否存在任何概念,功能或机械差异?从概念上讲,我看不到任何差异,因为它们都旨在为异步计算提供一种机制。


答案 1

主要的不便之处在于,您无法在不阻塞的情况下获得值。java.util.concurrent.Future

实际上,检索值的唯一方法是该方法(引用自文档)get)

如有必要,等待计算完成,然后检索其结果。

相反,您将获得真正的非阻塞计算,因为您可以附加回调以完成(成功/失败),或者只是映射它并以一元方式将多个期货链接在一起。scala.concurrent.Future

长话短说,scala的未来允许异步计算,而不会阻塞不必要的线程。


答案 2

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)

推荐