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?
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:
Tags und Links java multithreading synchronized