Sun JVM如何将Java线程映射到Windows线程?

9
我的应用程序使用了大量的Java线程。我想要可靠地理解JVM(版本5和6)如何将Java线程映射到底层的Windows线程。我知道有一个用于映射到Solaris线程的文档,但没有Windows的。
为什么Sun不发布这些信息呢?
我想知道是否有1:1的映射,或者它是否因JVM、-server选项、工作负载等而异。
我知道我不应该关心这个问题,我应该编写正确同步的代码,但我继承了大量的代码...
此外,有人知道如何给Windows线程命名吗?

如果它能做到比1:1调度更高级的事情,我会感到惊讶。 - JesperE
4个回答

7

我没有相关文档,但是从任务管理器中的线程列可以比较可靠地猜测它与本地线程一一对应(您需要先在任务管理器中启用线程列)。

哦,差点忘了,您可以在这里下载jdk源代码并自行查看。


1

映射是依赖于平台的,但我发现了一个有趣的比较,用于虚拟机平台线程(虽然可能有点陈旧)。底线是:你不需要知道。如果你还不知道,你可能更感兴趣的是绿色线程

至于命名问题:构造函数难道不能让你给线程命名吗?或者你是指在某些Windows线程浏览器上命名并查看它们的名称?


0

如果你想使用它,你可以随时在那段代码周围包装一些JNI。 - James Van Huis
你可能会很难找到Windows线程ID - 它不会匹配JVM返回的线程ID。但是,在我看来,这在Java中实际上是你不应该需要做的事情。 - matt b
我最近一直在处理创建Win32 AccessTokens的JNI代码,可能这些令牌只能在它们被创建的操作系统线程中工作。不过还不确定。 - David Leonard

0
JVM规范在这方面没有做出具体的规定。将Java线程映射到平台线程(Windows、Linux等)取决于JVM实现者。而且很难相信Java线程和操作系统线程之间会有一对一的映射关系。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接