Java vs Scala Threads - 在JVM的封面下

Raw*_*oon 5 java multithreading jvm scala

在尝试比较Java和Scala中实现的同一个简单问题的"执行特性"时,我发现Java版本中的线程类在名为 Thread-x的线程上运行,而Scala actor在名称类似的线程上运行ForkJoinPool-x-worker-y.非线程Java类和非actor actor Scala类始终在主线程上运行.

下面的日志片段将说明:

Java version: Scoord thread class running in Thread[Thread-0,5,main]
              Semaphore class running in Thread[main,5,main]

Scala version: Scoord actor running in Thread[ForkJoinPool-1-worker-13,5,main]
               Semaphore class running in Thread[main,5,main]
Run Code Online (Sandbox Code Playgroud)

除了作为不同类的实例 - Thread类和ForkJoinWorkerThread类之外,这些线程之间有什么区别?工作线程如何映射到O/S内核线程以执行?

关于用于JVM线程的命名约定的任何解释也将非常受欢迎.

两个实现都在相同版本的JVM上运行 - HotSpot(TM)64位服务器VM(内置23.21-b01,混合模式).硬件是64位,4核Acer笔记本电脑,内存为8G,运行Windows 8.

Grz*_*Żur 4

Scala 演员不是线程!它们是异步处理事件的对象 - 它们可能在不同的线程中运行。

Scala actor是一个类似于通信顺序进程的概念,但与线程不同。尽管如此,CSP 实现中通常使用线程,请参阅Go 语言。