1. 程式人生 > >Java併發程式設計札記-(四)JUC鎖-01概述

Java併發程式設計札記-(四)JUC鎖-01概述

今天來學習JUC鎖。JUC鎖位於java.util.concurrent.locks包下,為鎖和等待條件提供一個框架,它不同於內建同步和監視器。

參考JDK1.8的java.util.concurrent.locks包,畫出如下圖:

MarkdownPhotos/master/CSDNBlogs/concurrency/0201/locks.png

CountDownLatch,CyclicBarrier和Semaphore不在包中,但也是通過AQS來實現的。因此,我也將它們歸納到JUC鎖中進行介紹。

Lock
Lock實現提供了比使用synchronized方法和語句可獲得的更廣泛的鎖定操作。

ReentrantLock
一個可重入的互斥鎖,它具有與隱式鎖synchronized相同的一些基本行為和語義,但功能更強大。

AbstractOwnableSynchronizer/AbstractQueuedSynchronizer/AbstractQueuedLongSynchronizer
AbstractQueuedSynchronizer就是被稱之為AQS的類,為實現依賴於先進先出 (FIFO) 等待佇列的阻塞鎖和相關同步器(訊號量、事件,等等)提供一個框架。ReentrantLock,ReentrantReadWriteLock,CountDownLatch,CyclicBarrier和Semaphore等這些類都是基於AQS類實現的。
AbstractQueuedLongSynchronizer以long形式維護同步狀態的一個AbstractQueuedSynchronizer版本。
AbstractQueuedSynchronizer與AbstractQueuedLongSynchronizer都繼承了AbstractOwnableSynchronizer。AbstractOwnableSynchronizer是可以由執行緒以獨佔方式擁有的同步器。

Condition
Condition又稱等待條件,它實現了對鎖更精確的控制。Condition中的await()方法相當於Object的wait()方法,Condition中的signal()方法相當於Object的notify()方法,Condition中的signalAll()相當於Object的notifyAll()方法。不同的是,Object中的wait(),notify(),notifyAll()方法是和synchronized組合使用的;而Condition需要與Lock組合使用。

ReentrantReadWriteLock
ReentrantReadWriteLock維護了一對相關的鎖,一個用於只讀操作,另一個用於寫入操作。

LockSupport
用來建立鎖和其他同步類的基本執行緒阻塞原語。

CountDownLatch
一個同步輔助類,在完成一組正在其他執行緒中執行的操作之前,它允許一個或多個執行緒一直等待。

CyclicBarrier
一個同步輔助類,它允許一組執行緒互相等待,直到到達某個公共屏障點。

Semaphore
一個計數訊號量。從概念上講,訊號量維護了一個許可集。Semaphore通常用於限制可以訪問某些資源的執行緒數目。

本文就講到這裡,想了解Java併發程式設計更多內容請參考:

END.