国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Heim Java JavaErste Schritte Was sind die Unterschiede zwischen Java-Sperren?

Was sind die Unterschiede zwischen Java-Sperren?

Nov 12, 2019 pm 04:31 PM
java der Unterschied Sperren

Was sind die Unterschiede zwischen Java-Sperren?

Fair Lock/Unfair Lock

Fair Lock bedeutet, dass mehrere Threads die Sperre in der Reihenfolge erhalten, die sie beantragen es Sperren.

Unfaire Sperre bedeutet, dass die Reihenfolge, in der mehrere Threads Sperren erhalten, nicht mit der Reihenfolge übereinstimmt, in der sie Sperren anwenden. Es ist m?glich, dass der Thread, der sp?ter angewendet wurde, die Sperre vor dem Thread erh?lt, der zuerst angewendet wurde. Es ist m?glich, dass es zu einer Priorit?tsumkehr oder einem Aushungern kommt.

Für Java ReentrantLock geben Sie über den Konstruktor an, ob die Sperre eine faire Sperre ist, und der Standardwert ist eine unfaire Sperre. Der Vorteil unfairer Sperren besteht darin, dass der Durchsatz gr??er ist als bei fairen Sperren.

Für Synchronized handelt es sich ebenfalls um eine unfaire Sperre. Da es keine Thread-Planung über AQS wie ReentrantLock implementiert, gibt es keine M?glichkeit, es in eine faire Sperre umzuwandeln.

Wiedereintrittssperre

Wiedereintrittssperre, auch als rekursive Sperre bekannt, bedeutet, dass, wenn derselbe Thread die Sperre in der ?u?eren Methode erh?lt, er in die innere Methode eintritt Die Sperre wird automatisch übernommen. Es ist etwas abstrakt, aber unten finden Sie ein Codebeispiel.

Für Java ReentrantLock kann der Name als Wiedereintrittssperre angesehen werden und lautet Reentrant Lock.

Für Synchronized handelt es sich auch um eine Wiedereintrittssperre. Ein Vorteil von Wiedereintrittssperren besteht darin, dass Deadlocks bis zu einem gewissen Grad vermieden werden k?nnen.

synchronized void setA() throws Exception{
    Thread.sleep(1000);
    setB();
}
synchronized void setB() throws Exception{
    Thread.sleep(1000);
}

Der obige Code ist eine Funktion einer Wiedereintrittssperre. Wenn es sich nicht um eine Wiedereintrittssperre handelt, wird setB m?glicherweise nicht vom aktuellen Thread ausgeführt, was zu einem Deadlock führen kann.

Exklusive Sperre/gemeinsame Sperre

Exklusive Sperre bedeutet, dass die Sperre jeweils nur von einem Thread gehalten werden kann.

Geteilte Sperre bedeutet, dass die Sperre von mehreren Threads gehalten werden kann.

Für Java ReentrantLock handelt es sich um eine exklusive Sperre. Aber für eine andere Implementierungsklasse von Lock, ReadWriteLock, ist die Lesesperre eine gemeinsame Sperre und die Schreibsperre eine exklusive Sperre.

Die gemeinsame Sperre der Lesesperre stellt sicher, dass das gleichzeitige Lesen sehr effizient ist und sich die Prozesse Lesen, Schreiben, Schreiben und Schreiben gegenseitig ausschlie?en.

Exklusive Sperren und gemeinsame Sperren werden ebenfalls über AQS implementiert, und es werden verschiedene Methoden implementiert, um exklusive oder gemeinsame Sperren zu erreichen.

Für Synchronized handelt es sich natürlich um eine exklusive Sperre.

Mutex-Sperre/Lese-/Schreibsperre

Die oben erw?hnte exklusive Sperre/gemeinsame Sperre ist ein weit gefasster Begriff, und die Mutex-Sperre/Lese-/Schreibsperre ist eine spezifische Realisierung .

Die spezifische Implementierung der Mutex-Sperre in Java ist ReentrantLock.

Die spezifische Implementierung der Lese-/Schreibsperre in Java ist ReadWriteLock.

Optimistische Sperre/pessimistische Sperre

Optimistische Sperre und pessimistische Sperre beziehen sich nicht auf bestimmte Arten von Sperren, sondern auf die Perspektive der Betrachtung von Parallelit?t und Synchronisation.

Die pessimistische Sperre geht davon aus, dass gleichzeitige Vorg?nge an denselben Daten definitiv ge?ndert werden. Auch wenn keine ?nderung vorliegt, wird sie als ge?ndert betrachtet. Daher erfolgt bei gleichzeitigen Vorg?ngen mit denselben Daten die pessimistische Sperre in Form einer Sperre. Pessimistisch gesehen glaube ich, dass gleichzeitige Vorg?nge ohne Sperren definitiv Probleme verursachen werden.

Optimistisches Sperren geht davon aus, dass gleichzeitige Vorg?nge an denselben Daten nicht ge?ndert werden. Beim Aktualisieren von Daten werden die Daten aktualisiert, indem versucht wird, die Daten zu aktualisieren und die Daten st?ndig neu zu aktualisieren. Optimistisch gesehen wird es bei gleichzeitigen Vorg?ngen ohne Sperren kein Problem geben.

Aus der obigen Beschreibung k?nnen wir ersehen, dass pessimistisches Sperren für Szenarien mit vielen Schreibvorg?ngen geeignet ist und optimistisches Sperren für Szenarien mit vielen Lesevorg?ngen geeignet ist Verbesserungen.

Die Verwendung pessimistischer Sperren in Java besteht darin, verschiedene Sperren zu verwenden.

Die Verwendung von optimistischem Sperren in Java ist eine sperrenfreie Programmierung, und der CAS-Algorithmus wird h?ufig verwendet. Ein typisches Beispiel ist die Atomklasse, die die Aktualisierung atomarer Operationen durch CAS-Spin implementiert.

Segmentierte Sperre

Segmentierte Sperre ist eigentlich ein Sperrenentwurf, keine spezifische Sperre. Für ConcurrentHashMap ist die Parallelit?tsimplementierung effizient. Gleichzeitige Vorg?nge werden durch segmentierte Sperren erreicht.

Nehmen wir ConcurrentHashMap, um über die Bedeutung und Designidee der Segmentsperre zu sprechen. Die Segmentsperre in ConcurrentHashMap hei?t Segment und ?hnelt der Struktur von HashMap (der Implementierung von HashMap in JDK7 und JDK8). Das hei?t, das interne Es gibt ein Eintragsarray, und jedes Element im Array ist eine verknüpfte Liste und ein ReentrantLock (Segment erbt ReentrantLock).

Wenn Sie ein Element einfügen müssen, sperrt es nicht die gesamte Hashmap, sondern verwendet zun?chst den Hashcode, um zu ermitteln, in welchem ??Segment es platziert werden soll, und sperrt dann dieses Segment, also wann Wenn Multithread-Put Solange es nicht in einem Segment platziert wird, wird eine echte parallele Einfügung erreicht.

Wenn Sie jedoch die Gr??e z?hlen und die globalen Informationen der Hashmap erhalten, müssen Sie alle zu z?hlenden Segmentsperren erhalten.

Der Entwurfszweck der segmentierten Sperre besteht darin, die Granularit?t der Sperre zu verfeinern. Wenn der Vorgang nicht das gesamte Array aktualisieren muss, wird nur ein Element im Array gesperrt.

Bias Lock/Lightweight Lock/Heavyweight Lock

Diese drei Arten von Schl?ssern beziehen sich auf den Status des Schlosses und sind für Synchronisiert. In Java 5 wird eine effiziente Synchronisierung durch die Einführung eines Sperraktualisierungsmechanismus erreicht. Der Status dieser drei Sperren wird durch die Felder im Objektkopf des Objektmonitors angezeigt.

Voreingenommene Sperre bedeutet, dass immer ein Thread auf einen Teil des Synchronisationscodes zugreift und der Thread dann automatisch die Sperre erh?lt. Reduzieren Sie die Kosten für die Anschaffung von Schl?ssern.

Lightweight-Sperre bedeutet, dass, wenn die Sperre eine voreingenommene Sperre ist und von einem anderen Thread darauf zugegriffen wird, die voreingenommene Sperre zu einer leichten Sperre aufgewertet wird. Andere Threads werden versuchen, die Sperre durch Spin zu erhalten, was die Leistung verbessert.

Schwergewichtssperre bedeutet, dass die Drehung nicht für immer fortgesetzt wird, wenn es sich um eine Leichtgewichtssperre handelt tritt in die Blockierung ein und das Schloss wird zu einem Schwergewichtsschloss erweitert. Schwere Sperren blockieren andere Anwendungsthreads und verringern die Leistung.

Spin-Lock

In Java bedeutet ein Spin-Lock, dass der Thread, der versucht, die Sperre zu erlangen, nicht sofort blockiert, sondern versucht, die Sperre in einer Schleife zu erlangen . Der Vorteil besteht darin, den Verbrauch des Thread-Kontextwechsels zu reduzieren, der Nachteil besteht jedoch darin, dass die Schleife CPU verbraucht.

php Chinesische Website, eine gro?e Anzahl kostenloser Java-Einführungs-Tutorials, willkommen zum Online-Lernen!

Das obige ist der detaillierte Inhalt vonWas sind die Unterschiede zwischen Java-Sperren?. 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

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

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.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

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)

Hei?e Themen

PHP-Tutorial
1502
276
Vergleich von Java Frameworks: Spring Boot vs Quarkus gegen Micronaut Vergleich von Java Frameworks: Spring Boot vs Quarkus gegen Micronaut Aug 04, 2025 pm 12:48 PM

Pre-Formancetartuptimemoryusage, QuarkusandmicronautleadduToCompile-Time-foringandgraalvSupport, WithQuarkusofttenperformLightBetterin serverloser Szenarien.2. Thyvelopecosystem,

Lautst?rketasten auf der Tastatur funktioniert nicht Lautst?rketasten auf der Tastatur funktioniert nicht Aug 05, 2025 pm 01:54 PM

Zun?chst checkifthefnkeysettingIssinterferingbyingbothThevolumeKeyaloneAndfn VolumeKey, thentogglefnlockwithfn EscifAvailable

Berechnete Eigenschaften gegen Methoden in Vue Berechnete Eigenschaften gegen Methoden in Vue Aug 05, 2025 am 05:21 AM

Berechnet hat einen Cache, und mehrere Zugriffe werden nicht neu berechnet, wenn die Abh?ngigkeit unver?ndert bleibt, w?hrend Methoden jedes Mal ausgeführt werden, wenn sie aufgerufen werden. 2. Computed eignet sich für Berechnungen basierend auf reaktionsschnellen Daten. Methoden eignen sich für Szenarien, in denen Parameter erforderlich sind, oder h?ufige Aufrufe, das Ergebnis h?ngt jedoch nicht von reaktionsschnellen Daten ab. 3. Computed unterstützt Getter und Setzer, die die Zwei-Wege-Synchronisation von Daten realisieren k?nnen. Methoden werden jedoch nicht unterstützt. 4. Zusammenfassung: Verwenden Sie zuerst berechnet, um die Leistung zu verbessern und Methoden zu verwenden, wenn sie Parameter übergeben, Vorg?nge ausführen oder Cache vermeiden. Nach dem Prinzip "Wenn Sie berechnet k?nnen, verwenden Sie keine Methoden".

Wie vergleiche ich zwei Saiten in Java? Wie vergleiche ich zwei Saiten in Java? Aug 04, 2025 am 11:03 AM

Verwenden Sie die Methode .equals (), um den String -Inhalt zu vergleichen, da == nur Objektreferenzen als Inhalt vergleichen; 1. Verwenden Sie .Equals (), um die Zeichenfolgenwerte gleicherma?en zu vergleichen; 2. Verwenden Sie .EqualSignoreCase (), um das Ignorieren zu vergleichen; 3. verwenden. Compareto (), um Zeichenfolgen in der W?rterbuchreihenfolge zu vergleichen, wobei 0, negative oder positive Zahlen zurückgegeben werden; V. 5. Objekte verwenden. Ausgleich () oder Safe Call -Methode, um Null -Zeichenfolgen zu verarbeiten, um Null -Zeiger -Ausnahmen zu vermeiden. Kurz gesagt, Sie sollten vermeiden, == für String -Inhaltsvergleiche zu verwenden, es sei denn, es ist ausdrücklich erforderlich, zu überprüfen, ob sich das Objekt in der Phase befindet.

Python -Anmeldung zum Dateibeispiel Python -Anmeldung zum Dateibeispiel Aug 04, 2025 pm 01:37 PM

Das Protokollierungsmodul von Python kann Protokolle über FileHandler in Dateien schreiben. Rufen Sie zun?chst den Prozessor und das Format der BasicConfig -Konfigurationsdatei auf, z. Zweitens fügen Sie StreamHandler hinzu, um gleichzeitig die Ausgabe an die Konsole zu erreichen. Fortgeschrittene Szenarien k?nnen TimedrotatingFileHandler verwenden, um Protokolle nach Zeit zu teilen, z. B. Einstellung, wann = 'Mitternacht' jeden Tag neue Dateien generiert und 7 Tage Backup beibehalten, und sicherzustellen, dass das Protokollverzeichnis existiert. Es wird empfohlen, GetLogger (__ Name__) zu verwenden, um benannte Logger zu erstellen und zu produzieren

Wie schlie?e ich mich einer Reihe von Saiten in Java an? Wie schlie?e ich mich einer Reihe von Saiten in Java an? Aug 04, 2025 pm 12:55 PM

Die Verwendung von String.Join () (Java8) ist die am einfachsten empfohlene Methode zum Anschlie?en von String -Arrays. Geben Sie einfach den Trennzeichen direkt an. 2. Für alte Versionen von Java oder wenn mehr Kontrolle ben?tigt wird, k?nnen Sie StringBuilder verwenden, um manuell zu durchqueren und zu splei?en. 3.. Stringjoiner eignet sich für Szenarien, die flexiblere Formate wie Pr?fixe und Suffixe erfordern. V. Zusammenfassend sollte die Methode String.Join () in den meisten F?llen bevorzugt werden, wenn Java8 und h?her verwendet wird.

Java gegen Python für die Backend -Entwicklung: ein detaillierter Vergleich Java gegen Python für die Backend -Entwicklung: ein detaillierter Vergleich Aug 04, 2025 am 11:57 AM

Systeme mit hohen Leistungsanforderungen wie Java für Finanztransaktionen, Python für leichte Dienstleistungen; 2. Python hat eine hohe Entwicklungseffizienz, die für MVP geeignet ist. Java eignet sich für eine gro? angelegte Teamzusammenarbeit. 3. Java ist aus dem ?kosystem auf Unternehmensebene ausgereift, und das Python-Framework ist leicht, insbesondere Fastapi ist hervorragend. 4. Java ist die erste Wahl für verteilte Systeme mit hoher Konsequenz, und Python ben?tigt asynchrone Modelle, um die Leistung zu verbessern. 5. Python hat eine reibungslose Lernkurve und eine breite Palette von Talenten, und Java hat ausreichende Reserven von Talenten auf Unternehmensebene. 6. Python eignet sich für die leichte Bereitstellung von Cloud-nativen, und Java ist stabiler für herk?mmliche Betrieb und Wartung. Die endgültige Auswahl sollte mit dem Technologiestapel, dem Projektzyklus, dem Leistungsanforderungen des Teams, der Komplexit?t der Integration sowie den Betriebs- und Wartungskosten kombiniert werden. Der Schlüssel besteht darin, das richtige Szenario zu verwenden.

Fortgeschrittene Java -Debugging -Techniken in der Intellij -Idee Fortgeschrittene Java -Debugging -Techniken in der Intellij -Idee Aug 04, 2025 pm 01:06 PM

UseconditionalbreakpointStopUusexexexecutionOnlywhenPecificconditionSaremet, ReducingunnoyStopsinLoopSorFrequentMethodcalls.2.

See all articles