关于多线程:在性能方面,最好是在java中使用runnable而不是callable吗?

Is it preferable to use runnable instead of callable in java, in terms of performance?

我刚开始学习函数语言(scala),其中一个声明/建议是,"在进行多线程处理时,您应该尝试使用react而不是recieve"方法。为了清楚起见,react不返回任何值,但recieve返回任何值。他们有自己的理由支持这一建议。因为scala在JVM上工作。让我感到好奇的是,如果使用EDCOX1的"4"是比在Java中使用EDCOX1×5的代价更高的事务吗?

有没有人对此有过相同的经验或评论?


runnable和callback具有相同的"性能",因为它们只是接口。

这两个接口有轻微的API差异-必须使用与消费API兼容的类型;仅此而已。

这与演员中的scala或react与recieve无关;问题框本身进入了错误的角落。


嗯,你真的把不同的概念混在一起了。

使用react而不是receive的原因是每个拥有receive的参与者都需要自己的线程。所以每个演员都有一个线程。另一方面,react由一个线程池处理,该线程池将在该参与者上运行该消息,然后转到下一个参与者和消息。(这真的只允许你做出反应——你不能等待一定的时间。)

另一方面,EDCOX1 4和EDCOX1×5接口只是在Java中封装代码的方法,这取决于您是否只希望它完成(EDCOX1×4)或返回一个值(EDOCX1?5)。接口本身在性能上没有任何差别,但是为了让Callable返回值返回给您,还需要做一些额外的事情,因此如果您可以用任何一种方式编写它,您最好使用只需要Runnable的东西。(实际上,这可能意味着启动一个线程而不是一个未来。)但是实现细节非常重要,以至于您不能单独在接口的基础上做出任何一般性的建议。您需要知道接口实际上是如何在您调用的实际类中使用的。