-1

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

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

4

2 回答 2

3

Runnable 和 Callback 具有相同的“性能”,因为它们只是Interfaces

这两个接口有细微的 API 差异——必须使用与消费 API 兼容的类型;就这些。

这与 Scala 或 Actor 中的react vs. recieve无关;问题框本身进入错误的角落。

于 2013-06-25T04:42:37.573 回答
2

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

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

另一方面,RunnableandCallable接口只是在 Java 中打包代码的方法,具体取决于您是希望它做一些事情(Runnable)还是返回一个值(Callable)。接口本身在性能上没有任何差异,但是为了将Callable返回值返回给您,还需要做一些额外的事情,所以如果您可以用任何一种方式编写它,您最好使用一些只需要一个Runnable. (实际上,这可能意味着启动一个线程而不是一个未来。)但是实现细节非常重要,以至于您不能仅根据接口提出任何一般性建议。你需要知道接口是如何在你调用的实际类中实际使用的。

于 2013-06-25T05:05:57.307 回答