Unterschiede zwischen C# und Java
Prinzipiell sind die Thread-Modelle von C# und Java sehr ähnlich.
Der Unterschied liegt im Detail
C# |
Java |
Jede parameterlose void-Methode kann als Thread gestartet werden.
Die vordefinierte Klasse Thread muss dazu nicht erweitert werden. |
Threads müssen als Unterklassen der vordefinierten Klasse
Thread implementiert werden. Die Anweisungen des Threads müssen in
der Methode Run implementiert werden. |
Soll der Thread einen Zustand besitzen, dann muss dieser in Form
von Feldern derjenigen Klasse implementiert werden, zu der die Thread-Methode
gehört. |
Soll der Thread einen Zustand besitzen, dann muss dieser in Form
von Feldern der Unterklasse von Thread implementiert werden. |
Die lock-Anweisung garantiert, dass immer nur einer von
mehreren Threads in einer kritischen Region ist. |
Die synchronized-Anweisung von Java entspricht der
lock-Anweisung von C#.
Es kann aber auch eine ganze Methode als synchronized deklariert werden,
was gleichbedeutend ist mit einer synchronized-Anweisung über alle
Anweisungen der Methode. |
Die lock-Anweisung setzt eine Sperre auf ein beliebiges Objekt. |
Die synchronized-Anweisung setzt eine Sperre auf das Objekt this. |
Wait und Pulse sind Methoden der Klasse Monitor. Sie
können auf beliebige Objekte angewendet werden (d.h. auf Objekte, auf
die eine Sperre gesetzt wurde). |
wait und notify sind Methoden der Klasse Object. Sie
werden implizit auf this angewendet (d.h. auf das Objekt, auf das
eine Sperre gesetzt wurde). |
In C# wird zwischen Vordergrund- und Hintergrund-Threads
unterschieden. |
In Java wird zwischen User- und Demon-Threads unterschieden.
Die Bedeutung ist dieselbe. |
|