当前位置: 首页 > 知识库问答 >
问题:

Java vs Scala线程——在JVM的掩护下

曾瀚昂
2023-03-14

在尝试比较Java和Scala中实现的同一个简单问题的“执行特征”时,我发现Java版本中的线程类在名称为thread-x的线程上运行,而Scala参与者在名称为ForkJoinPool-x-worker-y的线程上运行。非线程Java类和非参与者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]

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

对于JVM线程使用的命名约定的任何解释都将不胜感激。

这两种实现都在同一版本的JVM上运行——HotSpot(TM)64位服务器VM(build 23.21-b01,混合模式)。硬件是一台64位、4核、8G内存的宏碁笔记本电脑,运行Windows 8。

共有2个答案

孟茂学
2023-03-14

没有scala线程——scala使用完全相同的java线程。因此,映射到操作系统线程有相同的规则。actor构建在相同的并发原语之上,尤其是线程池,所以基本上是比较线程池和裸线程。参与者的默认线程池是fork-join池——在其他类型的线程池中,fork-join池的主要功能是窃取工作。

话虽如此,没有什么能阻止您从java中使用FJP(java 7上的开箱即用,或java 6中的可插入库)并观察相同的结果和命名(但显然使用可怕的低级api)。

朱修真
2023-03-14

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

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

 类似资料:
  • 本文向大家介绍【java 多线程】守护线程与非守护线程的详解,包括了【java 多线程】守护线程与非守护线程的详解的使用技巧和注意事项,需要的朋友参考一下 Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程) 用户线程即运行在前台的线程,而守护线程是运行在后台的线程。 守护线程作用是为其他前台线程的运行提供便利服务,而且仅在普通、非守护线程仍然运行时才需

  • 本文向大家介绍浅谈java的守护线程与非守护线程,包括了浅谈java的守护线程与非守护线程的使用技巧和注意事项,需要的朋友参考一下 最近重新研究Java基础知识,发现以前太多知识知识略略带过了,比较说Java的线程机制,在Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程) ,(PS:以前忽略了)。 估计学过Unix开发但是没有细致学习Java的同学们会

  • 问题内容: 我正在做Java试卷,并且遇到了以下使我感到困惑的问题。 以下哪项是正确的?(选择所有适用项。) 答:当应用程序开始运行时,会有一个守护线程,其任务是执行main()。 B.当一个应用程序开始运行时,有一个非守护进程线程,其工作是执行main()。 C.由守护程序线程创建的线程最初也是守护程序线程。 D.由非守护程序线程创建的线程最初也是非守护程序线程。 关键答案是B,C,D,谁能告诉

  • 主要内容:1 什么是Java 守护线程,2 Java 守护线程的要点,3 Thread类的守护线程方法,3 Java 守护线程的例子1 什么是Java 守护线程 Java中的守护程序线程是一个服务提供者线程,向用户线程提供服务。它的寿命受到用户线程的控制,即当所有用户线程死亡时,JVM会自动终止该线程。 有许多自动运行的Java守护程序线程,例如gc,finalizer等。 您可以通过在cmd命令提示符下键入来查看所有详细信息。jconsole工具提供有关已加载类,内存使用情况,正在运行的线程等

  • 本文向大家介绍守护线程和用户线程的区别?相关面试题,主要包含被问及守护线程和用户线程的区别?时的应答技巧和注意事项,需要的朋友参考一下 java中线程氛围 守护线程Daemon和用户线程User。可以通过Thread.setDaemon(true)设置为守护线程,但是必须在start之前调用。 Daemon是为其他线程提供服务,如果全部用户线程结束,Daemon没有服务对象,也就没有继续运行程序的

  • 问题内容: Java虚拟机可以维护的最大线程数是多少? 我没有在最初的问题中对此进行解释,但是我正在尝试对JVM进行基准测试,并希望尝试查看它可以同时维护多少个线程。 在循环中创建线程直到引发异常是一种选择,但是,我想知道是否有更好的方法来执行此操作。 问题答案: 编写循环以创建新线程直到被炸毁是确定的明确方法。您可能会发现性能在实际消失之前会急剧下降。 我不知道JVM是否有任何配置参数或其他内置