Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading Scala中Runnable和Future的区别是什么?_Multithreading_Scala - Fatal编程技术网

Multithreading Scala中Runnable和Future的区别是什么?

Multithreading Scala中Runnable和Future的区别是什么?,multithreading,scala,Multithreading,Scala,我有Java背景,最近根据工作需要开始在Scala上编写代码 我已经通读并知道如何使用future执行异步任务 我想知道: 如果我想要执行的异步任务没有返回值,那么使用提交给线程的runnable和单独使用future有什么区别吗 与runnable相比,future的性能如何?还是我在拿苹果和橘子做比较 未来是运行异步的东西的“容器”,它是一个monad 因此,您将获得一个工具箱来处理计算结果/失败 你读过这篇文章吗?未来是运行异步的东西的“容器”,它是一个单子 因此,您将获得一个工具箱来处理

我有Java背景,最近根据工作需要开始在Scala上编写代码

我已经通读并知道如何使用future执行异步任务

我想知道:

如果我想要执行的异步任务没有返回值,那么使用提交给线程的runnable和单独使用future有什么区别吗

与runnable相比,future的性能如何?还是我在拿苹果和橘子做比较


未来是运行异步的东西的“容器”,它是一个monad

因此,您将获得一个工具箱来处理计算结果/失败


你读过这篇文章吗?

未来是运行异步的东西的“容器”,它是一个单子

因此,您将获得一个工具箱来处理计算结果/失败


您读过吗:?

Future scala.concurrent.Future,不要与Scalaz中的一个混淆,它是在下面使用Runnable实现的-请参阅PromiseCompletingRunnable。在许多方面,它只是一个包装器,提供了很好的高级功能,特别是使用flatMap进行合成。因此,行为和性能非常相似——未来的性能将比原始Runnable稍差一点,因为它需要实例化更多的包装器类,但如果未来要做任何实际工作,尤其是运行它需要创建一个新线程,这在实践中不太可能被注意到。如果您创建一个未来[Unit]并将其扔掉,这实际上与创建一个Runnable并将其提交到相同的ExecutionContext非常相似。

Future scala.concurrent.Future,不要与Scalaz中的一个混淆,它是在下面使用Runnable实现的-请参阅PromiseCompletingRunnable。在许多方面,它只是一个包装器,提供了很好的高级功能,特别是使用flatMap进行合成。因此,行为和性能非常相似——未来的性能将比原始Runnable稍差一点,因为它需要实例化更多的包装器类,但如果未来要做任何实际工作,尤其是运行它需要创建一个新线程,这在实践中不太可能被注意到。如果您创建一个未来的[Unit]并将其扔掉,这实际上与创建一个Runnable并将其提交到相同的ExecutionContext差不多。

Apple with orange,是的。这两件事根本不能互换。@Duncan这正是发生在我身上的事情@邓肯说得通:是的,苹果加橘子。这两件事根本不能互换。@Duncan这正是发生在我身上的事情@邓肯说得有道理:我希望未来和runnable类似。下面是否有将来使用runnable的引用状态?另外,如果是一个包装的runnable,那么返回值的future是如何实现的呢?我没有任何参考资料,只是查看标准库源代码。通过承诺返回值;创建未来时,实际实现为1。创造一个承诺2。让PromiseCompletingRunnable执行您给它的计算,然后用它完成承诺3。将PromiseCompletingRunnable提交到ExecutionContext 4。回报我的承诺。我期待着未来会像runnable一样。下面是否有将来使用runnable的引用状态?另外,如果是一个包装的runnable,那么返回值的future是如何实现的呢?我没有任何参考资料,只是查看标准库源代码。通过承诺返回值;创建未来时,实际实现为1。创造一个承诺2。让PromiseCompletingRunnable执行您给它的计算,然后用它完成承诺3。将PromiseCompletingRunnable提交到ExecutionContext 4。回报承诺。