Lock ist der wichtigste Synchronisationsmechanismus in der gleichzeitigen Java-Programmierung. Die Sperrung wird in JAVA über das Schlüsselwort Synchronized und verwandte Klassen im Paket java.util.concurrent implementiert.
Das Konzept der Sperre in Java
Spin-Sperre: bedeutet, dass, wenn ein Thread eine Sperre erhält und die Sperre von einem anderen Thread erworben wurde, der Thread dies auch tun wird Warten Sie in einer Schleife und prüfen Sie dann kontinuierlich, ob die Sperre erfolgreich erworben werden kann. Die Schleife wird erst beendet, wenn die Sperre erworben wurde.
Optimistische Sperre: Es wird davon ausgegangen, dass kein Konflikt vorliegt. Wenn sich herausstellt, dass die Daten nicht mit den zuvor erfassten Daten übereinstimmen, lesen Sie die neuesten Daten und versuchen Sie die Änderung nach der Änderung erneut >
Pessimistische Sperre: Es wird davon ausgegangen, dass ein Parallelitätskonflikt auftritt. Synchronisieren Sie alle zugehörigen Vorgänge für Daten und starten Sie die Sperre beim Lesen von Daten. Exklusive Sperre (Schreiben): Fügen Sie der Ressource eine Schreibsperre hinzu , der Thread, der die Sperre besitzt, kann die Ressource ändern, und andere Threads können keine weitere Sperre hinzufügen (einzelnes Schreiben) Gemeinsame Sperre (Lesen): Nach dem Hinzufügen einer Lesesperre zu einer Ressource kann diese nur noch gelesen werden nicht geändert. Andere Threads können nur Lesesperren hinzufügen, keine Schreibsperren (mehrere Lesevorgänge)Wiedereintretende Sperre: Nachdem ein Thread eine Sperre erhalten hat, kann er den mit derselben Sperre synchronisierten Code frei eingeben Nicht wiedereintretende Sperre: Nachdem ein Thread eine Sperre erhalten hat, kann er nicht frei denselben Code eingeben. Der Code zum Synchronisieren der SperreGerechte Sperre: Die Reihenfolge des Wettbewerbs um die Sperre ist in der Reihenfolge: Wer zuerst kommt, mahlt zuerstUnfaire Sperre: Die Reihenfolge des Wettbewerbs um die Sperre ist nicht in der Reihenfolge „Wer zuerst kommt, mahlt zuerst“
Mehrere wichtige Methoden zur Sperrenimplementierung in Java: synchronisiert , ReentrantLock, ReentrantReadWriteLock
Synchronisationsschlüsselwörter: synchronisiert
Sperrbereich: Objektsperre, Klassensperre, verteilte Sperre
synchronisierte Funktionen: Wiedereintrittsfähige, exklusive, pessimistische Sperre
Sperrenoptimierung:Die Sperrenbeseitigung ist eine Sperrenoptimierungsmethode, die auf Compilerebene erfolgt Der -in-time-Compiler erfordert die Synchronisierung einiger Codes während der Laufzeit, es wurde jedoch festgestellt, dass es keinen Sperrenwettbewerb für gemeinsam genutzte Daten gibt. Eliminate (Parameter zum Aktivieren der Sperreneliminierung: -xx:+DoEscapeAnalysis -XX:+EliminateLocks) Sperrenvergröberung: In einigen Fällen möchten wir viele Sperranforderungen in einer Anforderung zusammenführen. Reduzieren Sie den Leistungsverlust, der durch eine große Anzahl von Sperranforderungen, Synchronisierungen und Freigaben in kurzer Zeit verursacht wird.Hinweis : Das synchronisierte Schlüsselwort erreicht nicht nur die Synchronisierung, sondern JMM legt auch fest, dass synchronisiert die Sichtbarkeit gewährleisten muss (kann nicht zwischengespeichert werden).Beispiel für einen synchronisierten Verwendungscode:
public class Counter { private static int i = 0; // 等价于 synchronized(this) public synchronized void update() { i++; } public void updateBlock() { synchronized (this) { i++; } } // 等价于 synchronized (Counter.class) public static synchronized void staticUpdate() { i++; } public static void staticUpdateBlock() { synchronized (Counter.class) { i++; } } }
Das obige ist der detaillierte Inhalt vonWas ist eine Java-Sperre?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!