ReentrantLock
![](https://cdn.codegym.cc/images/article/ee2cd199-b06a-4310-93c0-67f113b8ba93/1024.jpeg)
Condiție - aplicarea condițiilor în încuietori vă permite să obțineți controlul asupra gestionării accesului la fluxuri. Condiția de blocare este un obiect al interfeței Condition dinjava.util.concurrent.locks. Utilizarea obiectelor Condition este în multe privințe similară cu utilizareawait/notify/notifyAllclasa Object , care au fost discutate într-unul din subiectele anterioare.
Lock este o interfață dincadrul de blocarecare oferă o abordare flexibilă pentru restricționarea accesului la resurse/blocuri în comparație cu sincronizarea. Când se folosesc mai multe încuietori, ordinea eliberării lor poate fi arbitrară, plus poate fi și configurată. Există și posibilitatea de a gestiona situația când lacătul este deja capturat.
ReentrantLock este una dintre implementările interfeței Lock , clasa ReentrantLock . Permite aceluiași thread să apeleze metoda de blocare, chiar dacă a apelat-o înainte, fără a elibera blocarea.
Clasa ReentrantLock , pe lângă metodele interfeței Lock , are o metodă din fabrică newCondition() . Această metodă returnează un obiectCondiție, care vă permite să adăugați firul curent la setul de așteptare al obiectului datCondiție.
private final Lock R_LOCK = ReentrantLock();
R_LOCK.lock();
try {
//some action happens here
} finally {
R_LOCK.unlock();
}
ReadWriteLock este o interfață pentru crearea de blocări de citire/scriere. Blocările sunt extrem de utile atunci când un sistem are multe citiri și puține scrieri.
ReentrantReadWriteLock - folosit în serviciile multi-threaded și cache-uri, are un spor de performanță în comparație cu blocurile sincronizate. De fapt, clasa funcționează în 2 moduri care se exclud reciproc: mulți cititori citesc date în paralel și când doar un scriitor scrie date.
ReentrantReadWriteLock.ReadLock - blocare de citire pentru cititori, obținut prin readWriteLock.readLock().
ReentrantReadWriteLock.WriteLock - blocare de scriere pentru scriitori, obținut prin readWriteLock.writeLock().
Sincronizator
![](https://cdn.codegym.cc/images/article/cb9ae844-7dce-459b-b8af-55a1830c5fb1/512.jpeg)
AbstractOwnableSynchronizer este clasa de bază responsabilă pentru construirea mecanismelor de sincronizare. Conține un getter/setter pentru a reține și a citi un flux exclusiv care poate funcționa pe datele dvs.
AbstractQueuedSynchronizer este clasa de bază pentru mecanismul de sincronizare în FutureTask, CountDownLatch, Semaphore, ReentrantLock, ReentrantReadWriteLock. Este, de asemenea, utilizat atunci când se creează noi mecanisme de sincronizare care se bazează pe o valoare int unică și atomică.
AbstractQueuedLongSynchronizer este o variantă a AbstractQueuedSynchronizer care acceptă valoarea atomică lungă.