2008-11-03 7 views
9

Meine Anwendung verwendet viele Java-Threads. Ich suche ein zuverlässiges Verständnis dafür, wie die JVM (Version 5 und 6) die Java-Threads den zugrunde liegenden Windows-Threads zuordnet. Ich weiß, dass es ein Dokument für die Zuordnung zu Solaris-Threads gibt, aber nicht für Windows.Wie ordnet die Sun JVM Java-Threads Windows-Threads zu?

Warum nicht Sun diese Informationen veröffentlichen?

Ich möchte wissen, ob es eine 1 ist: Abbildung 1, oder wenn sie von JVM, durch -Server Option variiert, durch Arbeitsbelastung, etc, etc.

Ich weiß, ich bin nicht „angeblich“ zu kümmern, ich soll richtig synchronisd ​​Code schreiben, aber ich bin eine große Menge an Code ...

auch vererben, weiß jemand, wie Namen, um Windows-Threads zu geben?

+0

würde ich überrascht, wenn es etwas weiter fortgeschritten als 1 tut: 1-Scheduling. – JesperE

Antwort

6

Haben Sie kein Dokument für Sie, aber aus der Threads-Spalte im Task-Manager können Sie ziemlich sicher erraten, dass es native Threads 1: 1 zugeordnet (Sie müssen zuerst die Threads-Spalte im Task-Manager aktivieren)).

Oh, fast vergessen, können Sie das jdk src here herunterladen und sich selbst suchen.

1

Das Mapping ist plattformabhängig, aber ich habe eine interessante comparison zwischen Plattform Threads für die VM gefunden (obwohl wahrscheinlich ein bisschen alt). Die Quintessenz ist: Sie müssen es nicht wissen. Was Sie wahrscheinlich mehr interessiert, ist über green threads zu wissen (wenn Sie nicht bereits wissen).

Wie für die Namensgebung Frage: Hat nicht die constructor erlauben Sie einen Thread zu nennen? Oder meinen Sie, sie zu benennen und ihren Namen in einem Windows-Thread-Browser anzuzeigen?

0

How to name a Win32 thread

Leider scheint dies wie es unmöglich ist, oder zumindest sehr schwer in dem Windows-JVM zu tun.

+0

Sie könnten immer einen JNI um diesen Code wickeln, wenn Sie ihn verwenden möchten. –

+0

Sie können die Windows-Thread-ID möglicherweise nicht finden - die von der JVM zurückgegebene threadID würde nicht übereinstimmen. Aber scheint mir, als wäre das etwas, was Sie in Java überhaupt nicht tun sollten. –

+0

Ich habe kürzlich mit JNI-Code beschäftigt, der Win32 AccessTokens erstellt, und es kann sein, dass diese Token nur im OS-Thread funktionieren, in dem sie erstellt wurden .. nicht sicher aber .. –

0

JVM-Spezifikation sagt nichts streng in dieser Hinsicht. Es ist links bis zu den JVM-Implementoren, um Java-Theads auf Plattform-Theads (Windows, Linux usw.) abzubilden. Auch ist es schwer zu glauben, dass es eine Eins-zu-eins-Zuordnung zwischen Java-Threads und OS-Threads geben wird.

Verwandte Themen