2008-11-03 35 views
9

我的应用程序使用Java线程的负载。我正在寻找可靠的理解JVM(版本5和6)如何将Java线程映射到底层Windows线程。我知道有一个映射到Solaris线程的文档,但不是Windows。Sun JVM如何将Java线程映射到Windows线程?

为什么Sun不发布此信息?

我想知道,如果有一个1:1的映射,或者如果它由JVM变化,由-server选项,通过工作量,等等,等等

我知道我不是“应该”关心,我应该写正确synchronisd代码,但我继承了大量的代码...

此外,有没有人知道如何给Windows线程的名称?

+0

如果它比1:1调度更高级,我会感到惊讶。 – JesperE 2008-11-03 15:23:04

回答

6

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

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

1

映射是依赖于平台的,但是我发现在vm的平台线程之间有一个有趣的comparison(虽然可能有点旧)。底线是:你不需要知道。你可能更感兴趣的是知道green threads(如果你不知道)。

至于命名问题:constructor不允许你命名一个线程?或者你的意思是命名它们并在一些Windows线程浏览器上查看它们的名字?

0

How to name a Win32 thread

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

+0

如果你想使用它,你总是可以在该代码周围包装一些JNI。 – 2008-11-03 15:59:57

0

JVM规范在这方面没有严格的说什么。它留给JVM实现者来映射Java平台到平台(Windows,Linux等)。也很难相信Java线程和OS线程之间会有一对一的映射。