# Priorität setzen bei Thread



## reibi (29. Okt 2007)

Hallo zusammen,

ich möchte die Priorität meiner 2 Threads setzen ... nur gelingt mir das nicht.

so siehts aus:


```
SpecialThread myThread01=new SpecialThread("A");
		SpecialThread myThread02=new SpecialThread("B");

		myThread01.setPriority(10);
		myThread02.setPriority(1);
		
		myThread01.start();
		myThread02.start();
```


Beide Threads mach das Gleiche in ner Schleife und schreiben irgendwas auf den Bildschirm. Durch das setzen der Priorität sollte eigendlich der erste Thread häufiger dran sein. oder?

Das ist aber nicht der Fall!

Beide wechseln sich immer ab, auch wenn ich die Prioritäten vertausche.

was mach ich falsch? 

Danke für die Hilfe ;-)


----------



## Wildcard (29. Okt 2007)

Zeig mal deinen SpecialThread.


----------



## reibi (30. Okt 2007)

Hallo Wildcard, so siehts aus:


```
class SpecialThread extends Thread {

	SpecialThread() {
	} 

	SpecialThread(String threadName) {
		super(threadName);
	} 

	public void run() {
		
		for (int i = 0; i < 100; i++) {
			
			try {
				Thread.sleep(100);
				System.out.println(i+" - "+Thread.currentThread().getName());
			} catch (Exception e) {
				// TODO: handle exception
			}
		}
		
	} // end run()
}
```

Danke fürs kucken ;-)


----------



## Wildcard (30. Okt 2007)

Da deine Threads mehr schlafen als zu arbeiten, kann der Scheduler beide Threads problemlos bedienen ohne das die Priorität etwas ändern würde.


----------



## reibi (30. Okt 2007)

DH: ich probiers mal ohne schlafen aus! ... bis gleich


----------



## reibi (30. Okt 2007)

Hallo Wildcard, also es funzt!

nur wie er abwechselt entscheidet er trotzdem selber. Damit kann man irgendwie nicht rechnen. Im Durchnitt wird es wohl die eingestellte Prioritätsvergabe sein.

vielen Dank ;-)


----------



## Wildcard (30. Okt 2007)

Natürlich darfst du damit nicht rechnen. Du sagst lediglich 'dieser Thread ist mir wichtiger als dieser'. Was der Scheduler daraus macht *darf* dich nicht interessieren.


----------



## HansNeupert (5. Nov 2007)

Auf den Scheduler darf man sich nie verlassen.
Nebenbei gesagt verhält sich der Scheduler von JVM zu JVM anders. In Core Java hatte ich außerdem mal gelesen, dass die LinuX-Implementation der JVM Thread-Prioriäten gar nicht berücksichtigt.

mfg


----------



## Guest (6. Nov 2007)

HansNeupert hat gesagt.:
			
		

> Auf den Scheduler darf man sich nie verlassen.
> Nebenbei gesagt verhält sich der Scheduler von JVM zu JVM anders. In Core Java hatte ich außerdem mal gelesen, dass die LinuX-Implementation der JVM Thread-Prioriäten gar nicht berücksichtigt.
> 
> mfg


Hast Du da noch einen Link auf den Artikel? Wenn dem tatsächlich so wäre könnte es im Ernstfall zu sehr ungewünschte Verhaltensweisen führen. Die Priorität sollte zumindest die Vorrangigkeit der Threads regeln. Auf Prozessebene geht's hier ja noch mit "nice" , aber prozessintern sollte es definitiv auch möglich sein.


----------



## Wildcard (6. Nov 2007)

Vielleicht stammt das noch aus der Zeit als die Linux VM Green Threads verwendet hat. Mir ist jedenfalls nichts derartiges bekannt.


----------



## HansNeupert (9. Nov 2007)

Core Java ist an sich so das beste Werk zu Java, was da drin steht is au richtig. In der aktuellen Version die vor ein paar Wochen erschien steht: "In the Sun JVM for Linux, thread priorities are ignored altogether - all threads have the same priority."


----------



## Saxony (15. Nov 2007)

Hiho,

unter diesem Link hier kann man es sogar lesen.

So ich habe aber mal mich noch weiter informiert. In meinem Buch "Java Threads" 3rd Edition von 2004, welches bis JDK1.5 geht, steht folgendes:



			
				Java Threads Kap. 9 Seite 183 hat gesagt.:
			
		

> Until JDK 1.3, Linux-based virtual machines tended to use a green thread model.
> [...]
> JDK 1.3 added support for Linux native threads. However, the Linux kernel at the time was not optimal for threaded application; in particular, the ps command listed all threads as if they were different processes.
> 
> New Linux kernels use the Native Posix Thread Library (NPTL), which provides the same one-to-one mapping of Java threads to kernel threads that we've seen in other operating systems. The complex priority calculation for those threads is similar to what we saw on Solaris, where Java priority is only a small factor in the calculation. JDK 1.4 is the first version of Java to support this new kernel.



bye Saxony


----------

