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