Heim Java javaLernprogramm Einführung in die Verwendung des synchronisierten Schlüsselworts in Java (Codebeispiel)

Einführung in die Verwendung des synchronisierten Schlüsselworts in Java (Codebeispiel)

Jan 30, 2019 am 11:21 AM
synchronized

Dieser Artikel bietet Ihnen eine Einführung in die Verwendung des synchronisierten Schlüsselworts in Java (Codebeispiele). Ich hoffe, dass es einen gewissen Referenzwert hat es wird Ihnen hilfreich sein.

Bei der gleichzeitigen Programmierung spielt das synchronisierte Schlüsselwort eine häufige Rolle. Früher nannten wir das synchronisierte Schlüsselwort „Weight Lock“, aber „synchonized“ wurde in JDK1.6 optimiert und es wurden voreingenommene Sperren und leichte Sperren eingeführt. In diesem Artikel werden die Verwendung des synchronisierten Schlüsselworts sowie die Unterschiede und Implementierungsprinzipien von Bias-Sperren, leichten Sperren und schweren Sperren vorgestellt.

Sehen wir uns zunächst die vier Verwendungsmöglichkeiten des synchronisierten Schlüsselworts an.

1. Gewöhnliche Methoden ändern

private synchronized void synMethod(){
}
Nach dem Login kopieren

In dieser Verwendung Objekt Instanz einer synchronisierten Sperre.

2. Statische Methoden ändern

private static synchronized void synMethod(){
}
Nach dem Login kopieren

synchronisiert In diesem Fall ist die Sperre das aktuelle Klassenobjekt.

3. Synchroner Methodenblock

private  void synMethod1(){
        synchronized(this){
            
        }
    }    
    private  void synMethod2(){
        synchronized(ThreadTest.class){
            
        }
    }
Nach dem Login kopieren

Objektinstanz in synMethod1 sperren; das aktuelle Klassenobjekt.

Einführung in das Sperrprinzip

Bevor wir das Sperrprinzip einführen, lernen wir zunächst den Java-Objektheader Mark Word kennen, der 32-Bit verwendet als Beispiel.

Sperrstatus

25 Bit

4bit

1bit

2bit

 

23bit

2bit

Ob es in Richtung Sperre voreingenommen ist

Sperrflagge

Leichtes Schloss

Zeiger auf den Sperrdatensatz im Stapel

0

Schwergewichtsschloss

Zeiger auf Mutex (Schwergewichtssperre)

10

GCMarkieren

Leer

11

Bias-Sperre

ThreadID

Epoche

Alter der Objektgenerierung

1

01

Lockless

HashCode des Objekts

Alter der Objektgenerierung

0

01

Die obige Tabelle beschreibt die im Objektheader gespeicherten Informationen, wenn sich das Objekt in jedem Sperrstatus befindet.

1. Voreingenommene Sperre

Wenn in der tatsächlichen Umgebung ein Thread auf einen synchronisierten Block zugreift und kein anderer Thread um die Sperre konkurriert, und Derselbe Thread erhält die Sperre mehrmals, d. h. ein einzelner Thread führt den Synchronisationscode aus. Wenn der Thread in diesem Fall jedes Mal blockiert wird, bedeutet dies eine Verschwendung von CPU-Leistung. In diesem Fall wird das Konzept der vorgespannten Verriegelung eingeführt.

  • Zugriff auf synchronisierten Codeblock

  • Bestimmen Sie, ob die im Objektheader Mark Word gespeicherte Thread-ID auf den aktuellen Thread verweist. Wenn dies der Fall ist, bedeutet dies, dass die aktuelle Sperre nicht erforderlich ist, und führen Sie die Synchronisierung nicht direkt aus Code

  • Wenn nicht, versuchen Sie, den CAS-Algorithmus zu verwenden, um die Thread-ID im Objektheader zu aktualisieren.

  • Erhält erfolgreich die Sperre und führt den Synchronisierungscode aus. Wenn die Aktualisierung fehlschlägt, bedeutet dies, dass eine Sperrenkonkurrenz vorliegt. Warten Sie auf den globalen Sicherheitspunkt, halten Sie den Thread an, der die voreingenommene Sperre besitzt, und entscheiden Sie sich dafür, die voreingenommene Sperre auf eine leichte Sperre zu aktualisieren oder sie gemäß dem Sperrflag in auf keine Sperre zu setzen Objekt-Header.

Sie können -XX:-userBiasedLocking=false verwenden, um die voreingenommene JVM-Sperroptimierung zu deaktivieren und die Lightweight-Sperre standardmäßig direkt einzugeben.

2. Leichte Sperre

  • Zugriff auf den Synchronisierungscodeblock Erstellen Sie zunächst einen Sperrdatensatzbereich (Lock Record) im Thread-Stapel des aktuellen Threads.

  • Kopieren Sie den Objektheader Mark Word in den Sperrdatensatz.

  • Verwenden Sie CAS, um zu versuchen, den Thread-Zeiger im Objektheader Mark Word auf einen Zeiger auf den aktuellen Thread zu aktualisieren

  • Wenn die Aktualisierung erfolgt Erfolgreich erhalten Sie ein leichtes Schloss.

  • Aktualisierung fehlgeschlagen. Überprüfen Sie, ob der Zeiger in Mark Word auf den aktuellen Thread zeigt.

  • Wenn ja, bedeutet dies einen Wiedereintritt in die Sperre. Synchronisierten Codeblock ausführen

  • Wenn nicht, bedeutet dies, dass derzeit Konkurrenz besteht. Leichte Schlösser müssen zu Gewichtsschlössern erweitert werden.

3. Gewichtssperre

Die Gewichtssperre wird auf Basis des Objektmonitors (Monitor) implementiert.

Wenn ein Thread Synchronisationscode ausführt, muss er eine Monitor.enter-Anweisung aufrufen. Rufen Sie nach Beendigung der Ausführung die Anweisung „Monitor.exit“ auf. Hier ist ersichtlich, dass der Monitor exklusiv ist. Es kann jeweils nur ein Thread erfolgreich eingegeben werden und andere Threads können nur in der Warteschlange blockiert werden. Daher ist der Betrieb dieser Gewichtssperre sehr teuer.

Das obige ist der detaillierte Inhalt vonEinführung in die Verwendung des synchronisierten Schlüsselworts in Java (Codebeispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Die Prinzipien und Nutzungsszenarien von Synchronized in Java sowie die Nutzungs- und Differenzanalyse der Callable-Schnittstelle Die Prinzipien und Nutzungsszenarien von Synchronized in Java sowie die Nutzungs- und Differenzanalyse der Callable-Schnittstelle Apr 21, 2023 am 08:04 AM

1. Grundfunktionen 1. Es beginnt mit einer optimistischen Sperre und wird bei häufigen Sperrkonflikten in eine pessimistische Sperre umgewandelt wird in eine Schwergewichtssperre umgewandelt. 3. Die Spin-Lock-Strategie, die am wahrscheinlichsten bei der Implementierung von Leichtgewichtssperren verwendet wird. 4. Es handelt sich um eine unfaire Sperre. 5. Es handelt sich um eine Wiedereintrittssperre. 6. Es handelt sich nicht um eine Lese-/Schreibsperre. 2. Die JVM Synchronisiert den Sperrvorgang. Sperren werden in die Zustände „keine Sperre“, „voreingenommene Sperre“, „leichte Sperre“ und „schwere Sperre“ unterteilt. Es wird je nach Situation nacheinander aktualisiert. Bei der voreingenommenen Sperre wird davon ausgegangen, dass der männliche Protagonist eine Sperre und die weibliche Protagonistin ein Thread ist. Wenn nur dieser Thread diese Sperre verwendet, können der männliche Protagonist und die weibliche Protagonistin für immer glücklich leben, auch wenn sie keine Heiratsurkunde erhalten (um hohe Werte zu vermeiden). -Kostenoperationen). Aber die weibliche Nebenrolle erscheint

Beispielanalyse des Java-Schlüsselwortsynchronisierungsprinzips und des Sperrstatus Beispielanalyse des Java-Schlüsselwortsynchronisierungsprinzips und des Sperrstatus May 11, 2023 pm 03:25 PM

1. Das Konzept der Sperre in Java Spin Lock: Wenn ein Thread eine Sperre erhält und die Sperre von einem anderen Thread erworben wurde, wartet der Thread in einer Schleife und beurteilt dann weiter, ob die Sperre erfolgreich erworben werden kann es wird erfasst. Die Sperre verlässt die Schleife. Optimistische Sperre: Unter der Annahme, dass kein Konflikt vorliegt. Wenn beim Ändern der Daten festgestellt wird, dass die Daten nicht mit den zuvor erfassten Daten übereinstimmen, werden die neuesten Daten gelesen und die Änderung erneut versucht. Pessimistische Sperre: Gehen Sie davon aus, dass Parallelitätskonflikte auftreten, synchronisieren Sie alle datenbezogenen Vorgänge und beginnen Sie mit der Sperrung beim Lesen von Daten. Exklusive Sperre (Schreiben): Fügen Sie der Ressource eine Schreibsperre hinzu, aber andere Threads können sie nicht erneut sperren (einzelnes Schreiben). Gemeinsame Sperre (Lesen): Nach dem Hinzufügen einer Lesesperre zu einer Ressource kann diese nur gelesen, aber nicht geändert werden. Andere Threads können nur Lesesperren hinzufügen und keine Schreibsperren (mehrfach) hinzufügen. Siehe als S

Wie verwende ich synchronisiert, um den Synchronisierungsmechanismus in Java zu implementieren? Wie verwende ich synchronisiert, um den Synchronisierungsmechanismus in Java zu implementieren? Apr 22, 2023 pm 02:46 PM

Zusammenfassung der Verwendung von synchronisiert in Java 1. Bei Verwendung von synchronisiert als Funktionsmodifikator lautet der Beispielcode wie folgt: Publicsynchronizedvoidmethod(){//….} Dies ist die Synchronisationsmethode. Welches Objekt ist derzeit synchronisiert? Was er sperrt, ist der Aufruf dieses synchronisierten Methodenobjekts. Mit anderen Worten: Wenn ein Objekt P1 diese Synchronisationsmethode in verschiedenen Threads ausführt, schließen sie sich gegenseitig aus, um einen Synchronisationseffekt zu erzielen. Allerdings kann ein anderes Objekt P2, das von der Klasse generiert wird, zu der dieses Objekt gehört, diese Methode mit dem hinzugefügten synchronisierten Schlüsselwort willkürlich aufrufen. Der obige Beispielcode usw.

Was sind die drei Synchronisierungsmethoden in Java und wie werden sie verwendet? Was sind die drei Synchronisierungsmethoden in Java und wie werden sie verwendet? Apr 27, 2023 am 09:34 AM

1. Erklären Sie, dass synchronisiert unsere am häufigsten verwendete Synchronisierungsmethode ist und es drei Hauptmethoden gibt, sie zu verwenden. 2. Beispiel//Allgemeine Klassenmethodensynchronisation synchronisiertpublidvoidinvoke(){}//Klassenstatische Methodensynchronisation synchronisiertpublicstaticvoidinvoke(){}//Codeblocksynchronisation synchronisiert(object){}Der Unterschied zwischen diesen drei Methoden besteht darin, dass die synchronisierten Objekte unterschiedlich sind. Gewöhnliche Klassen synchronisieren das Objekt selbst, statische Methoden synchronisieren die Klasse selbst und Codeblöcke synchronisieren die Objekte, die wir in die Klammern füllen. Welche Sammlungen gibt es in Java?

Was ist das Prinzip und der Prozess des Java Synchronized Lock-Upgrades? Was ist das Prinzip und der Prozess des Java Synchronized Lock-Upgrades? Apr 19, 2023 pm 10:22 PM

Werkzeugvorbereitung Bevor wir offiziell über das Prinzip der Synchronisierung sprechen, sprechen wir zunächst über Spin-Locks, da Spin-Locks eine große Rolle bei der Optimierung der Synchronisierung spielen. Um Spinlocks zu verstehen, müssen wir zunächst verstehen, was Atomizität ist. Die sogenannte Atomizität bedeutet einfach, dass jede Operation entweder nicht ausgeführt wird oder dass sie während der Operation nicht unterbrochen werden kann. Um beispielsweise eine zu den variablen Daten hinzuzufügen, gibt es drei Schritte: Laden aus dem Speicher in das Register . Addiere eins zum Datenwert. Schreiben Sie das Ergebnis zurück in den Speicher. Atomizität bedeutet, dass ein Thread, der einen Inkrementierungsvorgang ausführt, nicht von anderen Threads unterbrochen werden kann. Nur wenn dieser Thread diese drei Prozesse abschließt

Warum müssen Sie Lock in Java bereitstellen, anstatt nur das synchronisierte Schlüsselwort zu verwenden? Warum müssen Sie Lock in Java bereitstellen, anstatt nur das synchronisierte Schlüsselwort zu verwenden? Apr 20, 2023 pm 05:01 PM

Zusammenfassung: Das synchronisierte Schlüsselwort wird in Java bereitgestellt, um sicherzustellen, dass nur ein Thread auf den synchronisierten Codeblock zugreifen kann. Warum wird die Lock-Schnittstelle auch im Java SDK-Paket bereitgestellt, da das synchronisierte Schlüsselwort bereitgestellt wurde? Ist das eine unnötige Neuerfindung des Rades? Heute werden wir dieses Thema gemeinsam besprechen. Das synchronisierte Schlüsselwort wird in Java bereitgestellt, um sicherzustellen, dass nur ein Thread auf den synchronisierten Codeblock zugreifen kann. Warum wird die Lock-Schnittstelle auch im Java SDK-Paket bereitgestellt, da das synchronisierte Schlüsselwort bereitgestellt wurde? Ist das eine unnötige Neuerfindung des Rades? Lassen Sie uns heute gemeinsam darüber diskutieren

Was ist Java synchronisiert? Was ist Java synchronisiert? May 14, 2023 am 08:28 AM

Was ist Synchronized? Java-Lesern ist das Schlüsselwort „Synchronized“ nicht fremd. Es ist in verschiedenen Middleware-Quellcodes oder JDK-Quellcodes zu finden. Leser, die mit „Synchronized“ nicht vertraut sind, wissen nur, dass das Schlüsselwort „Synchronized“ in Multi verwendet werden muss -Threading kann die Thread-Sicherheit gewährleisten. Es heißt: Mutex-Sperre (nur ein Thread kann gleichzeitig ausgeführt werden, andere Threads warten). Es heißt auch: pessimistische Sperre (nur ein Thread kann gleichzeitig ausgeführt werden, andere Threads warten). Maschine hilft Ihnen bei der Implementierung. Entwickler müssen nur das synchronisierte Schlüsselwort verwenden. Wenn Sie es verwenden, müssen Sie ein Objekt als Mutex für die Sperre verwenden

Wie viele Nichtzugriffsmodifikatoren gibt es in Java? Wie viele Nichtzugriffsmodifikatoren gibt es in Java? Aug 30, 2023 pm 06:01 PM

Java bietet einige andere Modifikatoren, um über die Sichtbarkeit hinausgehende Funktionalität bereitzustellen. Diese Modifikatoren werden als Nichtzugriffsmodifikatoren bezeichnet. Als statisch deklarierte Mitglieder sind allen Instanzen der Klasse gemeinsam. Statische Mitglieder sind Mitglieder auf Klassenebene, die im Klassenspeicher gespeichert werden. Final Dieser Modifikator wird verwendet, um weitere Änderungen an einer Variablen, Methode oder Klasse einzuschränken. Der Wert einer als endgültig deklarierten Variablen kann nicht mehr geändert werden, sobald sie ihren Wert erhält. Die Final-Methode kann weder in einer Unterklasse überschrieben werden, noch kann eine Unterklasse der Final-Klasse erstellt werden. Zusammenfassung: Dieser Modifikator kann mit einer Klasse oder Methode verwendet werden. Sie können diesen Modifikator nicht auf Variablen und Konstruktoren anwenden. Als abstrakt deklarierte Methoden müssen in Unterklassen geändert werden. Sie können eine als abstrakt deklarierte Klasse nicht instanziieren. Synchronous Dieser Modifikator wird zur Steuerung mehrerer Threads verwendet

See all articles