Heim  >  Artikel  >  Java  >  Einführung in die vier von synchronisierten Methoden

Einführung in die vier von synchronisierten Methoden

不言
不言nach vorne
2018-10-08 15:16:523288Durchsuche

Dieser Artikel bietet Ihnen eine Einführung in die vier Methoden zur Verwendung von Synchronisation. Er hat einen gewissen Referenzwert. Ich hoffe, er wird Ihnen hilfreich sein.

1. Ändern Sie eine Methode
synchronized. Das Ändern einer Methode ist sehr einfach. Fügen Sie einfach „synced“ vor der Methode hinzu, zum Beispiel:

public synchronized void method()
{
   // todo
}

kann nicht verwendet werden Verwenden Sie beim Definieren von Schnittstellenmethoden das synchronisierte Schlüsselwort.
Konstruktormethoden können das synchronisierte Schlüsselwort nicht verwenden, können aber synchronisierte Codeblöcke zur Synchronisierung verwenden.
Das synchronisierte Schlüsselwort kann nicht vererbt werden. Wenn Sie synchronisieren möchten, müssen Sie das Schlüsselwort explizit hinzufügen.
Die durch das synchronisierte Schlüsselwort geänderte Methode ist standardmäßig nicht synchron, wenn sie überschrieben wird. Wenn Sie synchronisieren möchten, müssen Sie das Schlüsselwort explizit hinzufügen, sonst entspricht die Methode der übergeordneten Klasse der Synchronisierung.

2. Ändern Sie den Codeblock

public  void method()
{
   synchronized(this)
   synchronized(XX.class)
}

synchronized(this) sperrt das aktuelle Objekt, dann gibt es hier mehrere Kopien davon Ist dies der Fall? Nur dasselbe Objekt kann gesperrt werden.
synchronized(XX.class) Diese Sperre ist nützlich, solange es sich um eine Klasse dieses Typs handelt

Wenn zwei gleichzeitige Threads auf den synchronisierten (diesen) Synchronisationscodeblock im selben Objektobjekt zugreifen, nur einer Es kann jeweils ein Thread ausgeführt werden. Ein anderer Thread muss warten, bis der aktuelle Thread die Ausführung dieses Codeblocks abgeschlossen hat, bevor er diesen Codeblock ausführen kann. Wenn ein Thread auf einen synchronisierten (diesen) synchronisierten Codeblock eines Objekts zugreift, kann ein anderer Thread weiterhin auf den nicht synchronisierten (diesen) synchronisierten Codeblock im Objekt zugreifen. Besonders kritisch ist, dass, wenn ein Thread auf einen synchronisierten (diesen) synchronisierten Codeblock des Objekts zugreift, der Zugriff anderer Threads auf alle anderen synchronisierten (diesen) synchronisierten Codeblöcke des Objekts blockiert wird.
Das dritte Beispiel gilt auch für andere synchronisierte Codeblöcke. Das heißt, wenn ein Thread auf einen synchronisierten (diesen) synchronisierten Codeblock eines Objekts zugreift, erhält er die Objektsperre dieses Objekts. Dadurch wird der Zugriff anderer Threads auf alle synchronisierten Codeteile des Objektobjekts vorübergehend blockiert.
Die oben genannten Regeln gelten auch für andere Objektsperren

3. Statische Methoden ändern
Wir wissen, dass statische Methoden zu Klassen und nicht zu Objekten gehören. In ähnlicher Weise sperrt die durch die Synchronisierung geänderte statische Methode alle Objekte dieser Klasse, und alle Klassen haben einen Sperreffekt, wenn sie verwendet werden

public synchronized static void method() {
   // todo
   }

4. Eine Klasse ändern
Was es tut Der Bereich ist der in Klammern eingeschlossene Teil nach der Synchronisierung, und die betroffenen Objekte sind alle Objekte dieser Klasse. Solange es sich um eine Klasse dieses Typs handelt, funktioniert es unabhängig von der Anzahl der Objekte. Der folgende Code

class ClassName {
    public void method() {
       synchronized(ClassName.class) {
                 // todo       
                 }
    }
 }

Zusammenfassung:

A. Unabhängig davon, ob das synchronisierte Schlüsselwort einer Methode oder einem Objekt hinzugefügt wird, gilt die Sperre, auf die es einwirkt, als nicht statisch ist das Objekt; wenn synchronisiert. Wenn das Objekt eine statische Methode oder eine Klasse ist, ist die Sperre, die es erhält, dieselbe Sperre für alle Objekte der Klasse.
B. Jedem Objekt ist nur eine Sperre zugeordnet, die diese Sperre erhält.
C. Das Erreichen einer Synchronisierung erfordert einen hohen Systemaufwand und kann sogar zu einem Deadlock führen. Vermeiden Sie daher unnötige Synchronisierungskontrollen.
D. Das Synchronisierungsschlüsselwort sperrt das Objekt

Das obige ist der detaillierte Inhalt vonEinführung in die vier von synchronisierten Methoden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen