Home   Cover Cover Cover Cover
 

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.