重入鎖

條件- 在鎖中應用條件允許您實現對流訪問管理的控制。鎖定條件是java.util.concurrent.locks中的Condition接口的一個對象。使用Condition對像在很多方麵類似於使用Objectwait/notify/notifyAll,這些方法在前面的主題之一中進行了討論。

Lock鎖框架,與同步相比,它提供了一種靈活的方法來限制對資源/塊的訪問。使用多個鎖時,釋放順序可以任意,也可以配置。當鎖已經被捕獲時,也有可能處理這種情況。

ReentrantLock是Lock接口的實現之一, ReentrantLock類。它允許同一個線程在不釋放鎖的情況下調用 lock 方法,即使它之前已經調用過。

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的變體,它支持原子 long 值。