ReentrantLock

Condizione : l'applicazione delle condizioni nei blocchi consente di ottenere il controllo sulla gestione dell'accesso ai flussi. La condizione di blocco è un oggetto dell'interfaccia Condition deljava.util.concurrent.locks. L'utilizzo degli oggetti Condition è per molti versi simile all'utilizzo deiwait/notifica/notificaAllclasse Object , discussi in uno degli argomenti precedenti.

Lock è un'interfaccia delframework di bloccoche fornisce un approccio flessibile per limitare l'accesso a risorse/blocchi rispetto a sincronizzato. Quando si utilizzano più blocchi, l'ordine del loro rilascio può essere arbitrario, inoltre può anche essere configurato. C'è anche la possibilità di gestire la situazione quando il blocco è già catturato.

ReentrantLock è una delle implementazioni dell'interfaccia Lock , la classe. Consente allo stesso thread di chiamare il metodo lock, anche se lo ha già chiamato, senza rilasciare il lock.

La classe ReentrantLock , oltre ai metodi dell'interfaccia Lock , ha un metodo factory newCondition() . Questo metodo restituisce un oggettoCondizione, che consente di aggiungere il thread corrente al set di attesa dell'oggetto specificatoCondizione.

private final Lock R_LOCK = ReentrantLock();
R_LOCK.lock();
try {
   //some action happens here
} finally {
   R_LOCK.unlock();
}

ReadWriteLock è un'interfaccia per la creazione di blocchi di lettura/scrittura. I blocchi sono estremamente utili quando un sistema ha molte letture e poche scritture.

ReentrantReadWriteLock : utilizzato nei servizi e nelle cache multi-thread, ha un buon incremento delle prestazioni rispetto ai blocchi sincronizzati. Infatti la classe funziona in 2 modalità che si escludono a vicenda: molti lettori leggono i dati in parallelo e quando solo 1 scrittore scrive i dati.

ReentrantReadWriteLock.ReadLock - blocco di lettura per i lettori, ottenuto tramite readWriteLock.readLock().

ReentrantReadWriteLock.WriteLock - blocco in scrittura per i writer, ottenuto tramite readWriteLock.writeLock().

sincronizzatore

AbstractOwnableSynchronizer è la classe base responsabile della creazione dei meccanismi di sincronizzazione. Contiene un getter/setter per ricordare e leggere un flusso esclusivo che può operare sui tuoi dati.

AbstractQueuedSynchronizer è la classe base per il meccanismo di sincronizzazione in FutureTask, CountDownLatch, Semaphore, ReentrantLock, ReentrantReadWriteLock. Viene utilizzato anche durante la creazione di nuovi meccanismi di sincronizzazione che si basano su un valore int singolo e atomico.

AbstractQueuedLongSynchronizer è una variante di AbstractQueuedSynchronizer che supporta il valore long atomico.