Heim > Java > javaLernprogramm > Hauptteil

Was ist eine Java-Sperre?

青灯夜游
Freigeben: 2019-11-15 16:24:20
Original
5373 Leute haben es durchsucht

Was ist eine Java-Sperre?

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 Sperre

Gerechte Sperre: Die Reihenfolge des Wettbewerbs um die Sperre ist in der Reihenfolge: Wer zuerst kommt, mahlt zuerst

Unfaire 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++;
}
}
}
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage