Multithreading 实例之间Scala全局线程拉取的行为

Multithreading 实例之间Scala全局线程拉取的行为,multithreading,scala,java.util.concurrent,Multithreading,Scala,Java.util.concurrent,我不清楚scala.concurrent.ExecutionContext.Implicits.global的行为 线程是为每个进程拉一个全局“单例”,还是在其作用域内的实例的本地?如果它是限定范围的,如何避免线程的过度分配 例如,在一个高度线程化的环境中,线程池对于所有这些实例是全局的还是每个实例都是全局的 做作的例子 MyClass.scala import scala.concurrent.ExecutionContext.Implicits.global class MyClass {

我不清楚scala.concurrent.ExecutionContext.Implicits.global的行为

线程是为每个进程拉一个全局“单例”,还是在其作用域内的实例的本地?如果它是限定范围的,如何避免线程的过度分配

例如,在一个高度线程化的环境中,线程池对于所有这些实例是全局的还是每个实例都是全局的

做作的例子

MyClass.scala
import scala.concurrent.ExecutionContext.Implicits.global
class MyClass {
  ...
  ...
  Future {
     for( var x <- Range ){
        Future {new MyClass} // create a new instance recursively asyncly
     }
  }
  ...
  ...
}
MyClass.scala
导入scala.concurrent.ExecutionContext.Implicits.global
类MyClass{
...
...
未来{

对于(var x它是每个进程的全局单例

您可以通过查看源代码来验证这一点,并看到它是在顶级对象中定义的对象,因此用更经典的术语来说,就是“在单例中定义的惰性val”

顺便说一下,您可以在ExecutionContext对象的注释中获得有关其属性的更多信息