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

Sun JVM如何将Java线程映射到Windows线程?,java,windows,multithreading,jvm,Java,Windows,Multithreading,Jvm,我的应用程序使用大量Java线程。我希望能够可靠地理解JVM(版本5和版本6)如何将Java线程映射到底层Windows线程。我知道有一个用于映射到Solaris线程的文档,但不是Windows 为什么Sun不发布这些信息 我想知道是否存在1:1映射,或者它是否因JVM、服务器选项、工作负载等而有所不同 我知道我不应该在意,我应该正确地编写同步代码,但我继承了大量代码 另外,有人知道如何给Windows线程命名吗?没有文档,但是从任务管理器中的“线程”列中,您可以非常可靠地猜测它将1:1映射到本

我的应用程序使用大量Java线程。我希望能够可靠地理解JVM(版本5和版本6)如何将Java线程映射到底层Windows线程。我知道有一个用于映射到Solaris线程的文档,但不是Windows

为什么Sun不发布这些信息

我想知道是否存在1:1映射,或者它是否因JVM、服务器选项、工作负载等而有所不同

我知道我不应该在意,我应该正确地编写同步代码,但我继承了大量代码


另外,有人知道如何给Windows线程命名吗?

没有文档,但是从任务管理器中的“线程”列中,您可以非常可靠地猜测它将1:1映射到本机线程(您需要先启用任务管理器中的“线程”列)


哦,差点忘了,你可以下载jdk src,看看你自己。

映射依赖于平台,但是我发现了一个有趣的vm平台线程之间的映射(尽管可能有点旧)。底线是:你不需要知道。你可能更感兴趣的是了解(如果你还不知道的话)

至于命名问题:不允许您命名线程吗?或者你的意思是命名它们并在某些windows线程浏览器上查看它们的名称?


不幸的是,在Windows JVM中,这似乎是不可能的,或者至少是很难做到的。

JVM规范没有严格说明这一点。它留给JVM实现者将Java Thead映射到平台Thead(Windows、Linux等)。而且很难相信Java线程和OS线程之间会有一对一的映射

如果它能做比1:1调度更高级的事情,我会感到惊讶。如果你想使用它,你可以在代码周围包装一些JNI。你可能很难找到windows线程ID,因为它与JVM返回的线程ID不匹配。但是,在我看来,这一点在Java中根本不需要做。我最近一直在处理创建Win32 AccessToken的JNI代码,可能这些Token只在创建它们的OS线程中工作。。不过我不确定。。