ReentrantLock

Условие - прилагането на условия в ключалките ви позволява да постигнете контрол върху управлението на достъпа до потоци. Условието за заключване е обект на интерфейса 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().

Синхронизатор

AbstractOwnableSynchronizer е основният клас, отговорен за изграждането на механизми за синхронизация. Съдържа getter/setter за запомняне и четене на изключителен поток, който може да работи с вашите данни.

AbstractQueuedSynchronizer е базовият клас за механизма за синхронизация във FutureTask, CountDownLatch, Semaphore, ReentrantLock, ReentrantReadWriteLock. Използва се и при създаване на нови механизми за синхронизация, които разчитат на единична и атомарна int стойност.

AbstractQueuedLongSynchronizer е вариант на AbstractQueuedSynchronizer , който поддържа стойността на atomic long.