ReentrantLock
![](https://cdn.codegym.cc/images/article/ee2cd199-b06a-4310-93c0-67f113b8ba93/1024.jpeg)
Условие - прилагането на условия в ключалките ви позволява да постигнете контрол върху управлението на достъпа до потоци. Условието за заключване е обект на интерфейса Condition отjava.util.concurrent.locks. Използването на обекти Condition е в много отношения подобно на използването наwait/notify/notifyAllкласа Object , които бяха обсъдени в една от предишните теми.
Lock е интерфейс отрамката за заключване, който предоставя гъвкав подход за ограничаване на достъпа до ресурси/блокове в сравнение със синхронизирания. Когато използвате няколко ключалки, редът на тяхното освобождаване може да бъде произволен, освен това може да бъде конфигуриран. Има и възможност за справяне със ситуацията, когато ключалката вече е уловена.
ReentrantLock е едно от имплементациите на интерфейса Lock , класът ReentrantLock . Позволява на същата нишка да извика метода за заключване, дори ако го е извикала преди, без да освобождава заключването.
Класът ReentrantLock , в допълнение към методите на интерфейса Lock , има фабричен метод newCondition() . Този метод връща обектСъстояние, което ви позволява да добавите текущата нишка към набора за изчакване на дадения обектСъстояние.
private final Lock R_LOCK = ReentrantLock();
R_LOCK.lock();
try {
//some action happens here
} finally {
R_LOCK.unlock();
}
ReadWriteLock е интерфейс за създаване на брави за четене/запис. Заключванията са изключително полезни, когато системата има много четения и малко записи.
ReentrantReadWriteLock - използва се в многонишкови услуги и кешове, има приятен тласък на производителността в сравнение със синхронизираните блокове. Всъщност класът работи в 2 взаимно изключващи се режима: много четци четат данни паралелно и когато само 1 писател записва данни.
ReentrantReadWriteLock.ReadLock - заключване за четене за четци, получено чрез readWriteLock.readLock().
ReentrantReadWriteLock.WriteLock - заключване на запис за писатели, получено чрез readWriteLock.writeLock().
Синхронизатор
![](https://cdn.codegym.cc/images/article/cb9ae844-7dce-459b-b8af-55a1830c5fb1/512.jpeg)
AbstractOwnableSynchronizer е основният клас, отговорен за изграждането на механизми за синхронизация. Съдържа getter/setter за запомняне и четене на изключителен поток, който може да работи с вашите данни.
AbstractQueuedSynchronizer е базовият клас за механизма за синхронизация във FutureTask, CountDownLatch, Semaphore, ReentrantLock, ReentrantReadWriteLock. Използва се и при създаване на нови механизми за синхронизация, които разчитат на единична и атомарна int стойност.
AbstractQueuedLongSynchronizer е вариант на AbstractQueuedSynchronizer , който поддържа стойността на atomic long.