Thread Priorities in Java

Hi
ich erzeuge einen Thread mit
Thread t = new Thread („Consumer“)
dann sage ich
t.setPriority (10);
t.start ();

andere Threads erzeuge ich genauso und setze niedrigere Prios.
Doch beim Laufen lassen beginnt mal der eine, mal der andere.
Egal wie ich die Prios vergebe.
Woran liegt das?

Grüsse
Herbie

hallo

das problem haben vermutlich alle programmierer, die sich von ihrem gesunden hausverstand leiten lassen.

laut spezifikation der vm ist explizit nicht definiert, welche auswirkung das setzen der priorität auf den scheduler hat. während z.b. die uralt-microsoft-vm das tatsächlich erwartungskonform umgesetzt hat (ist nur keinem aufgefallen, weil die praktisch keiner verwendet hat), setzt die sun-vm voraus, dass der programmierer seine programme genauso programmiert, wie es bei kooperativem multitaskting notwendig ist. sprich: die einzelnen threads müssen sich selber darum kümmern, dass sie sich nicht in die quere kommen. es gibt keinerlei garantie dafür, dass ein thread mit einer hohen priorität häufiger drannkommt als ein niedrigpriorisierter. die spezifikation der vm garantiert nicht mal, dass der hochpriorisierte überhaupt drannkommt, obwohl es praktisch alle implementierungen jeden thread rannlassen.

die brachialmethode zum sicherstellen, dass ein thread mit niedriger priorität den rest nicht blockiert, ist, ihn an strategisch günstigen punkten im code mittels Thread.sleep() mal kurz schlafen zu legen (recht im millisekundenbereich).

lg
erwin

War’s nicht so, dass nur die Echtzeit-VM unter Solaris die Priorität nutzt?

http://download.oracle.com/docs/cd/E17476_01/javase/…