statische synchronisierte und nicht statische synchronisierte Methoden in Threads

8

kann irgendjemand die Aussage erklären ... "statische synchronisierte Methode und nicht statische synchronisierte Methode blockieren sich nicht gegenseitig - sie können zur gleichen Zeit laufen"

    
satheesh 13.04.2011, 19:39
quelle

3 Antworten

9

Die Sperrobjekte unterscheiden sich in der statischen Methode und der nicht statischen Methode. Die statische Methode verwendet das Klassenobjekt als Sperre (lock obj: MyClass.class ), während die nicht statische Methode das Instanzobjekt als Sperre verwendet, an die der Aufruf der Methode zu dieser Zeit gebunden ist (lock obj: this ).

    
Chris Dennett 13.04.2011, 19:42
quelle
16
%Vor%

entspricht

%Vor%

während

%Vor%

entspricht

%Vor%

Das bedeutet: statische Methoden sperren das Klassenobjekt der Klasse. Nicht statische Methoden sperren die Instanz, auf der sie aufgerufen werden (standardmäßig ist auch synchronized(anyOtherLock) möglich). Da sie verschiedene Objekte sperren, blockieren sie sich nicht gegenseitig.

    
atamanroman 13.04.2011 19:48
quelle
0

Nicht statische synchronisierte Methoden setzen die Monitorsperre auf 'this'- Dies bedeutet nur, dass das aktuelle Objekt gesperrt ist. So werden alle mit dem aktuellen Objekt verbundenen Threads blockiert, um auf nicht statische Synchronisierungsmethoden dieser Klasse zuzugreifen, wenn ein Thread auf nicht statische zugreift synchronisierte Methode. während die Threads anderer Objekte weiterhin auf die Methoden zugreifen können.

Und statische synchronisierte Methoden setzen die Monitorsperre auf das Klassenobjekt. Das heißt, wenn ein Thread eines Objekts auf die Methode zugreift, werden alle Threads unabhängig von Objekten blockiert, um auf alle statischen synchronisierten Methoden der Klasse zuzugreifen.

öffentliche Klasse TestSync {

%Vor%

} Führen Sie einmal die statische Synchronisierung durch und entfernen Sie dann die nicht statischen synchronisierten Aufrufe (und den Kommentar, der statisch synchronisiert ist) in runnable und run. Du wirst es besser verstehen.

    
upadhyayRakes 12.07.2017 05:48
quelle

Tags und Links