Was ist Lock(), UnLock(), ReentrantLock(), TryLock() und wie unterscheidet es sich von Synchronized Block in Java?]

Veröffentlicht: 2020-07-05

In diesem Tutorial gehen wir auf Lock(), UnLock(), ReentrantLock(), TryLock() ein und wie es sich von Synchronized Block in Java unterscheidet.

Wenn Sie auch die folgenden Fragen haben, sind Sie hier richtig.

  • Sperren in Java
  • Beispiel für Java-Sperre und Parallelitätssperre vs. synchronisiert
  • Java Concurrency Tutorial – Wiedereintretende Sperren
  • Synchronisation – Korrekte Verwendung von Sperren/Entsperren für Java
  • java – Synchronisierung vs. Sperre
  • Beispiel für das Entsperren von Java-Sperren
  • Sperrmechanismus in java
  • Java-Sperre entsperrt anderen Thread

Lass uns anfangen. Lassen Sie uns zunächst jeden dieser Begriffe verstehen und dann das Arbeitsbeispiel durchgehen.

Sperren():

java.util.concurrent.locks . Eine Sperre ist ein Thread-Synchronisationsmechanismus wie synchronisierte Blöcke, außer dass Sperren ausgefeilter sein können als die synchronisierten Blöcke von Java. Es handelt sich um Schnittstellen und Klassen, die einen Rahmen zum Sperren und Warten auf Bedingungen bereitstellen, der sich von der integrierten Synchronisierung und den Monitoren unterscheidet.

Freischalten():

UnLock() hebt die Sperre auf Objekt auf.

ReentrantLock():

Eine ReentrantLock gehört dem Thread, der zuletzt erfolgreich gesperrt, aber noch nicht entsperrt wurde. Ein Thread, der eine lock aufruft, kehrt zurück und erwirbt die Sperre erfolgreich, wenn die Sperre keinem anderen Thread gehört. Die Methode kehrt sofort zurück, wenn der aktuelle Thread bereits die Sperre besitzt.

TryLock():

TryLock() erwirbt die Sperre nur, wenn sie zum Zeitpunkt des Aufrufs frei ist.

Tipp-1

Wenn Sie ein Objekt einfach sperren, würde ich es vorziehen, synchronized.

Während es bei der Synchronisierung super klar und unmöglich ist, etwas falsch zu machen:

Beispieldetails:

  1. Klasse erstellen: CrunchifyLockTutorial.java
  2. Erstellen Sie innere Klassen: Company und CrunchifyLoop
  3. Erstellen Sie aus Main zwei Objekte der Klasse Company
  4. Starten Sie die Fadenschleife für 10 an diesen Objekten
  5. Während Company1 mit Company2 spricht, sperrt es ein Objekt. Wenn gleichzeitig – wenn Company2 mit Company1 sprechen möchte, dann heißt es – Konflikt – Sperre existiert bereits. (Beide Unternehmen sind bereits im Gespräch).

Ausgabe:

Tipp-2

Sie können alles, was die Dienstprogramme in java.util.concurrent tun, mit den primitiven Elementen auf niedriger Ebene erreichen, wie synchronized “, volatile oder wait .