2008-11-03 41 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線程之間會有一對一的映射。