ReentrantLock
![](https://cdn.codegym.cc/images/article/ee2cd199-b06a-4310-93c0-67f113b8ba93/1024.jpeg)
Bedingung – Durch die Anwendung von Bedingungen in Sperren können Sie die Kontrolle über die Verwaltung des Zugriffs auf Streams erlangen. Die Sperrbedingung ist ein Objekt der Condition- Schnittstelle aus demjava.util.concurrent.locks. Die Verwendung von Condition- Objektenähnelt in vielerlei Hinsicht der Verwendung derWait-/Notify-/NotifyAll- Methoden der Object- Klasse, die in einem der vorherigen Themen besprochen wurden.
Lock ist eine Schnittstelledes Lock-Frameworks, die im Vergleich zu synchronisiert einen flexiblen Ansatz zur Einschränkung des Zugriffs auf Ressourcen/Blöcke bietet. Bei Verwendung mehrerer Sperren ist die Reihenfolge der Freigabe beliebig und konfigurierbar. Es besteht auch die Möglichkeit, mit der Situation umzugehen, wenn die Sperre bereits erfasst ist.
ReentrantLock ist eine der Implementierungen der Lock- Schnittstelle, der ReentrantLock- Klasse. Dadurch kann derselbe Thread die Sperrmethode aufrufen, auch wenn er sie bereits zuvor aufgerufen hat, ohne die Sperre aufzuheben.
Die ReentrantLock- Klasse verfügt zusätzlich zu den Methoden der Lock- Schnittstelle über eine Factory-Methode newCondition() . Diese Methode gibt ein Objekt zurückZustand, wodurch Sie den aktuellen Thread zum Wartesatz des angegebenen Objekts hinzufügen könnenZustand.
private final Lock R_LOCK = ReentrantLock();
R_LOCK.lock();
try {
//some action happens here
} finally {
R_LOCK.unlock();
}
ReadWriteLock ist eine Schnittstelle zum Erstellen von Lese-/Schreibsperren. Sperren sind äußerst nützlich, wenn ein System viele Lesevorgänge und wenige Schreibvorgänge aufweist.
ReentrantReadWriteLock – wird in Multithread-Diensten und Caches verwendet und bietet im Vergleich zu synchronisierten Blöcken eine deutliche Leistungssteigerung. Tatsächlich arbeitet die Klasse in zwei sich gegenseitig ausschließenden Modi: Viele Leser lesen Daten parallel und nur ein Schreiber schreibt Daten.
ReentrantReadWriteLock.ReadLock – Lesesperre für Leser, erhalten über readWriteLock.readLock().
ReentrantReadWriteLock.WriteLock – Schreibsperre für Autoren, erhalten über readWriteLock.writeLock().
Synchronisator
![](https://cdn.codegym.cc/images/article/cb9ae844-7dce-459b-b8af-55a1830c5fb1/512.jpeg)
AbstractOwnableSynchronizer ist die Basisklasse, die für den Aufbau von Synchronisierungsmechanismen verantwortlich ist. Enthält einen Getter/Setter zum Speichern und Lesen eines exklusiven Streams, der Ihre Daten verarbeiten kann.
AbstractQueuedSynchronizer ist die Basisklasse für den Synchronisationsmechanismus in FutureTask, CountDownLatch, Semaphore, ReentrantLock, ReentrantReadWriteLock. Es wird auch beim Erstellen neuer Synchronisierungsmechanismen verwendet, die auf einem einzelnen und atomaren int-Wert basieren.
AbstractQueuedLongSynchronizer ist eine Variante von AbstractQueuedSynchronizer , die den atomaren Long-Wert unterstützt.