why Synchronisierte Methode, die das gleichzeitige Ausführen mehrerer Threads zulässt?

7

Ich habe folgendes Programm in derselben Datei. Ich habe die run () Methode synchronisiert.

%Vor%

Ausgabe ist

%Vor%

Meine Frage ist, warum die synchronisierte Methode erlaubt, dass sowohl der Thread "My Thread 1" als auch der Thread "My Thread 4" gleichzeitig zugreift?

    
user980089 05.10.2011, 10:01
quelle

1 Antwort

27

synchronized -Methoden funktionieren auf Instanzebene. Jede Instanz der Klasse erhält eine eigene Sperre. Die Sperre wird jedes Mal erfasst, wenn eine synchronized -Methode der Instanz eingegeben wird. Dadurch wird verhindert, dass mehrere Threads synchronized methods für dieselbe Instanz aufrufen (dies verhindert auch, dass verschiedene Methoden synchronized für dieselbe Instanz aufgerufen werden).

Nun, da Sie zwei Instanzen Ihrer Klasse haben, erhält jede Instanz ihre eigene Sperre. Es gibt nichts zu verhindern, dass die beiden Threads jeweils gleichzeitig an einer eigenen Instanz arbeiten.

Wenn Sie dies verhindern möchten, könnten Sie einen synchronized(obj) -Block innerhalb von run() haben, wobei obj ein Objekt wäre, das von beiden Instanzen Ihrer Klasse gemeinsam genutzt wird:

%Vor%     
NPE 05.10.2011, 10:05
quelle