2009-07-13 9 views
1

Ich möchte ein Java-Programm ausführen, das die Thread-Klasse verwendet, so dass jedes Thread.run() zum Ausführen eines richtigen Kernel-Threads führt. Gibt es eine Möglichkeit, dies zu erreichen, indem einige Befehlszeilenparameter an die Java VM übergeben werden? Ich verwende Eclipse mit Java 1.5 SDK (und jre1.5.0_18) auf einem Windows-Rechner. Ich habe versucht, -XX: + UseBoundThreads, aber der Task-Manager scheint beide Threads laufen (ich bin mit einem Dual-Core-Rechner) auf dem gleichen Kern (der andere Kern ist im Leerlauf).Native Threads mit Java VM in Eclipse

Danke.

Antwort

2

Die Windows JVM verwendet immer native Threads. Es liegt jedoch im Ermessen des Kernels zu entscheiden, auf welchem ​​Kern die einzelnen Threads laufen sollen. Es gibt absolut keine Garantie dafür, dass zwei Threads zwischen zwei Cores gestartet werden.

Übrigens denke ich, dass die UseBoundThreads-Option nur Solaris ist, aber ich bin mir nicht sicher.

6

würde Ich mag ein Java-Programm auszuführen, die die Klasse Thread Faden, so dass jeder Thread.run() Ergebnisse für den Betrieb eines richtigen Kernel verwendet.

Wenn Sie Thread.run() aufrufen, erstellen Sie keine separaten Threads, Sie führen alles sequenziell im Hauptthread aus. Was Sie tun müssen, ist Thread.start() aufrufen, die einen neuen Thread erstellen und es ausführen Thread.run() ausführen wird.

+2

Heh, guten Fang :) – skaffman

+0

Sorry über die Thread.run(): Ich habe tatsächlich Thread.start() im Code aufgerufen. Ich habe run() und starte() durcheinander, während ich diese Frage aufschrieb. –

1

Sie können mit jvisualvm eine Verbindung herstellen, um zu sehen, welche Threads ausgeführt werden und wie viel CPU sie verwenden.

0

Dank Guys .. obwohl ich die richtige Antwort nicht kenne, gibt Java 1.6 in Eclipse mir fast zweimal die Leistung auf meinem Dual-Core für die Code-Basis, die ich betrachte ... auch, jvisvismvm funktioniert super als Profiler..danke!