Java和Scala都引入了自己的全局ForkJoinPool,Java为dbCollection.users.find({
_id: {$in: usersIds}
})
,Scala为java.util.concurrent.ForkJoinPool#commonPool
。
这两个似乎都打算用于相同的用例,特别是运行非阻塞并发任务(通常是隐式地)。
现在,根据我的理解,如果您以错误的方式选择了互操作性依赖项,您将最终得到两个线程池做完全相同的事情,一个用于Java世界,另一个用于Scala世界。
因此,除非我缺少明显的东西,否则Scala是否有充分的理由不将Java commonPool用作其全局ExecutionContext?
答案 0 :(得分:2)
要添加到其他答案-除了JVM版本问题之外,使用JVM特定的实现会将Scala API绑定到Java内部。即使最初不是目标,现在Scala社区也希望针对多个后端:我们有Scala,Scala.js和Scala Native。如果我们决定更改内容并将Scala库与JVM API耦合,则没有充分的理由-毕竟JVM上的所有ExecutionContext仍在内部使用某些Java的线程池实现,因此,这就像我们在重新发明轮子一样。
答案 1 :(得分:0)
ForkJoinPool
是Java 7中引入的,因此1.7
下的任何JVM都无法调用它。为了执行在<1.7 VM
上运行的Scala程序,当时是必须的;如今,当我们达到1.8
下针对JVM的EOL时,我想不需要维护那块蛋糕了,因为运行的每个JVM Scala都应包括Java类/包。
还要注意池中引入的其他changes,如this answer所述。