在性能方面,最好在java中使用runnable而不是callable吗?

时间:2013-06-25 04:38:45

标签: java multithreading performance scala

我刚开始学习一种函数式语言(Scala),其中一项声明/建议是,“在进行多线程处理时,应该尝试使用react而不是recieve”方法。为清楚起见,react不会返回任何值,recieve会返回任何值。他们有自己的理由来支持这项建议。因为Scala在JVM上工作。令我好奇的是,如果使用Callable比使用Java中的Runnable更昂贵,那么我会感到好奇吗?

有没有人对此有相同的经验或意见?

2 个答案:

答案 0 :(得分:3)

Runnable和Callback具有与Interfaces相同的“性能”。

这两个接口有slight API differences - 必须使用与消费API兼容的类型;就是这样。

这与演员中的Scala或react vs. recieve无关;问题陷入了错误的角落。

答案 1 :(得分:2)

Wellll,你真的在​​这里混合了不同的概念。

使用react而不是receive的原因是每个具有receive的actor都需要自己的线程。所以你每个演员都有一个帖子。另一方面,react由一个线程池处理,该线程将在该actor上运行该消息,然后继续执行下一个actor和消息。 (这实际上只允许你被动 - 你不能等待一段时间。)

另一方面,RunnableCallable接口只是用Java打包代码的方法,具体取决于你是否只想让它做东西(Runnable)或返回一个值(Callable)。接口本身在性能上没有任何差别,但为了获得Callable返回值,还有其他需要发生的事情,所以如果你可以用任何一种方式写它,你可能会最好使用只需要Runnable的东西。 (实际上,这可能意味着启动一个线程而不是一个未来。)但是实现细节非常重要,以至于您无法单独根据接口提出任何一般性建议。您需要知道接口实际上是如何在您正在调用的实际类中使用的。