ReentrantLock
![](https://cdn.codegym.cc/images/article/ee2cd199-b06a-4310-93c0-67f113b8ba93/1024.jpeg)
Tillstånd - att tillämpa villkor i lås gör att du kan uppnå kontroll över hanteringen av åtkomst till strömmar. Låsvillkoret är ett objekt i Condition -gränssnittet frånjava.util.concurrent.locks. Att använda Condition- objektliknar på många sätt att användawait/notify/notifyAllklassen Object , som diskuterades i ett av de tidigare ämnena.
Lås är ett gränssnitt frånlåsramverketsom ger ett flexibelt tillvägagångssätt för att begränsa åtkomst till resurser/block jämfört med synkroniserade. När du använder flera lås kan ordningen för deras frigöring vara godtycklig, plus att den också kan konfigureras. Det finns också möjlighet att hantera situationen när låset redan är fångat.
ReentrantLock är en av implementeringarna av Lock- gränssnittet, klassen ReentrantLock . Det tillåter samma tråd att anropa låsmetoden, även om den har anropat den tidigare, utan att släppa låset.
Klassen ReentrantLock , förutom metoderna i Lock- gränssnittet , har en fabriksmetod newCondition() . Denna metod returnerar ett objektSkick, som låter dig lägga till den aktuella tråden till vänteuppsättningen för det givna objektetSkick.
private final Lock R_LOCK = ReentrantLock();
R_LOCK.lock();
try {
//some action happens here
} finally {
R_LOCK.unlock();
}
ReadWriteLock är ett gränssnitt för att skapa läs/skrivlås. Lås är extremt användbara när ett system har många läsningar och få skrivningar.
ReentrantReadWriteLock – används i flertrådade tjänster och cachar, har en fin prestandaökning jämfört med synkroniserade block. Faktum är att klassen fungerar i två ömsesidigt uteslutande lägen: många läsare läser data parallellt och när bara 1 författare skriver data.
ReentrantReadWriteLock.ReadLock - läslås för läsare, erhållet via readWriteLock.readLock().
ReentrantReadWriteLock.WriteLock - skrivlås för skribenter, erhållet via readWriteLock.writeLock().
Synkroniserare
![](https://cdn.codegym.cc/images/article/cb9ae844-7dce-459b-b8af-55a1830c5fb1/512.jpeg)
AbstractOwnableSynchronizer är basklassen som ansvarar för att bygga synkroniseringsmekanismer. Innehåller en getter/settare att komma ihåg och läsa en exklusiv ström som kan arbeta på din data.
AbstractQueuedSynchronizer är basklassen för synkroniseringsmekanismen i FutureTask, CountDownLatch, Semaphore, ReentrantLock, ReentrantReadWriteLock. Det används också när man skapar nya synkroniseringsmekanismer som förlitar sig på ett enda atomärt int-värde.
AbstractQueuedLongSynchronizer är en variant av AbstractQueuedSynchronizer som stöder atomic long-värdet.