ReentrantLock
![](https://cdn.codegym.cc/images/article/ee2cd199-b06a-4310-93c0-67f113b8ba93/1024.jpeg)
Feltétel - a feltételek alkalmazása a zárakban lehetővé teszi az adatfolyamokhoz való hozzáférés kezelésének ellenőrzését. A zárolási feltétel ajava.util.concurrent.locks csomag Condition felületének objektuma. A Condition objektumoksok tekintetben hasonlít az Object osztályvárakozás/notify/notifyAll, amelyeket az előző témakörök egyikében tárgyaltunk.
A zár a zárolási keretrendszeregy olyan felülete, amely rugalmas megközelítést biztosít az erőforrásokhoz/blokkokhoz való hozzáférés korlátozására a szinkronizálthoz képest. Több zár használata esetén a feloldásuk sorrendje tetszőleges lehet, plusz konfigurálható is. Lehetőség van arra is, hogy kezeljük azt a helyzetet, amikor a zár már be van zárva.
A ReentrantLock a Lock interfész, a ReentrantLock osztályegyik megvalósítása. Lehetővé teszi, hogy ugyanaz a szál meghívja a zárolási metódust, még akkor is, ha korábban hívta, a zár feloldása nélkül.
A ReentrantLock osztály a Lock interfész metódusain kívül rendelkezik egy gyári newCondition() metódussal . Ez a metódus egy objektumot ad visszaFeltétel, amely lehetővé teszi az aktuális szál hozzáadását az adott objektum várakozási halmazáhozFeltétel.
private final Lock R_LOCK = ReentrantLock();
R_LOCK.lock();
try {
//some action happens here
} finally {
R_LOCK.unlock();
}
A ReadWriteLock egy olvasási/írási zárolások létrehozására szolgáló felület. A zárak rendkívül hasznosak, ha egy rendszerben sok az olvasás és kevés az írás.
A ReentrantReadWriteLock - a többszálú szolgáltatásokban és gyorsítótárakban használatos, a szinkronizált blokkokhoz képest szépen megnöveli a teljesítményt. Valójában az osztály 2 egymást kizáró módban működik: sok olvasó olvas adatokat párhuzamosan, és amikor csak 1 író ír adatokat.
ReentrantReadWriteLock.ReadLock – olvasási zár az olvasók számára, a readWriteLock.readLock() segítségével szerezhető be.
ReentrantReadWriteLock.WriteLock – írási zárolás írók számára, a readWriteLock.writeLock() segítségével szerezhető be.
Szinkronizátor
![](https://cdn.codegym.cc/images/article/cb9ae844-7dce-459b-b8af-55a1830c5fb1/512.jpeg)
Az AbstractOwnableSynchronizer a szinkronizálási mechanizmusok kiépítéséért felelős alaposztály. Tartalmaz egy gettert/beállítót egy exkluzív adatfolyam emlékezéséhez és olvasásához, amely képes kezelni az Ön adatait.
Az AbstractQueuedSynchronizer a FutureTask, CountDownLatch, Semaphore, ReentrantLock és ReentrantReadWriteLock szinkronizálási mechanizmusának alaposztálya. Új szinkronizálási mechanizmusok létrehozásakor is használják, amelyek egyetlen és atomi int értékre támaszkodnak.
Az AbstractQueuedLongSynchronizer az AbstractQueuedSynchronizer egyik változata, amely támogatja az atomi hosszú értéket.