首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java线程是如何调度的?

问java线程是如何调度的?
EN

Stack Overflow用户
提问于 2012-03-27 21:50:40
回答 4查看 1.6K关注 0票数 4

我最近开始用Java多线程编程,在Linux线程的情况下,我知道内核调度它们(因为它们是被调度的单位实体),但是Java程序运行在JVM上,这在我的系统(RHEL6.1)中是作为用户空间实例.So运行的程序,而内核不知道Java线程,为什么抢占式多任务是在JVM中完成的?如果能给出JVM和内核交互的整个机制来完成这件事,那将是很有帮助的。

请列举可能的信息来源

EN

回答 4

Stack Overflow用户

发布于 2012-03-27 22:24:17

java/JVM进程中的线程映射到本机线程,您可以在线程堆栈跟踪转储中看到java线程id和本机线程id。使用您喜欢的工具获取所有java线程的线程堆栈:

在控制台中的命令行信号,如ctrl+break (windows)或ctrl+\ linux),其中java程序是jdk中的行工具(从jdk中杀死-QUIT或jstack )

  • vm in the jdk和/或jmx

从这样的线程转储的第一行提取示例:...tid=0x0000002adaba9c00 nid=0x754c ...

  • tid = java线程id
  • nid =本机id (操作系统线程id)

使用操作系统的工具查找有关使用本机id (十六进制)的线程的更多信息。

在java代码内部,如果需要http://docs.oracle.com/javase/6/docs/api/java/lang/management/ThreadMXBean.html,您可以使用ThreadMXBean以编程方式检索更多线程信息

票数 3
EN

Stack Overflow用户

发布于 2012-03-27 21:56:34

阅读Distinguish Java threads and OS threads?,正如我在评论中所说的那样,Java线程是普通的操作系统线程,只是运行Java虚拟机代码

票数 2
EN

Stack Overflow用户

发布于 2012-03-27 22:23:54

jvm只是一个普通的进程,它从一个线程开始,然后可以生成任意多个线程。调度是在两个级别上完成的-进程之间和进程内的线程之间。所有这些都是由OS (通过libs)完成的-- jvm只需挂入即可。Google posix线程以获取更多细节-这就是向jvm公开(API)的内容。

这涉及到一些细节:http://www.ibm.com/developerworks/java/library/j-rtj3/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9890900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档