1、前言java
在分析完了集合框架後,頗有必要接着分析java併發包下面的源碼,JUC(java.util.concurrent)源碼也是咱們學習Java邁進一步的重要過程。咱們分爲幾個模塊進行分析,首先是對鎖模塊的分析。併發
2、鎖框架圖框架
在Java併發中,鎖是最重要的一個工具,由於鎖,才能實現正確的併發訪問,因此,先從鎖入手一步步進行分析,鎖的框架圖以下。工具
說明:在鎖結構框架中乃至併發框架中,AbstractQueuedSynchronizer都佔有舉足輕重的地位,同時LockSupport也是很是重要的類。學習
3、具體說明ui
3.1 Condition線程
Condition爲接口類型,它將 Object 監視器方法(wait、notify 和 notifyAll)分解成大相徑庭的對象,以便經過將這些對象與任意 Lock 實現組合使用,爲每一個對象提供多個等待 set (wait-set)。其中,Lock 替代了 synchronized 方法和語句的使用,Condition 替代了 Object 監視器方法的使用。能夠經過await(),signal()來休眠/喚醒線程。設計
3.2 Lock對象
Lock爲接口類型,Lock實現提供了比使用synchronized方法和語句可得到的更普遍的鎖定操做。此實現容許更靈活的結構,能夠具備差異很大的屬性,能夠支持多個相關的Condition對象。blog
3.3 ReadWriteLock
ReadWriteLock爲接口類型, 維護了一對相關的鎖,一個用於只讀操做,另外一個用於寫入操做。只要沒有 writer,讀取鎖能夠由多個 reader 線程同時保持。寫入鎖是獨佔的。
3.4 AbstractOwnableSynchonizer
AbstractOwnableSynchonizer爲抽象類,能夠由線程以獨佔方式擁有的同步器。此類爲建立鎖和相關同步器(伴隨着全部權的概念)提供了基礎。AbstractOwnableSynchronizer 類自己無論理或使用此信息。可是,子類和工具可使用適當維護的值幫助控制和監視訪問以及提供診斷。
3.5 AbstractQueuedLongSynchronizer
AbstractQueuedLongSynchronizer爲抽象類,以 long 形式維護同步狀態的一個 AbstractQueuedSynchronizer 版本。此類具備的結構、屬性和方法與 AbstractQueuedSynchronizer 徹底相同,但全部與狀態相關的參數和結果都定義爲 long 而不是 int。當建立須要 64 位狀態的多級別鎖和屏障等同步器時,此類頗有用。
3.6 AbstractQueuedSynchonizer
AbstractQueuedSynchonizer爲抽象類,其爲實現依賴於先進先出 (FIFO) 等待隊列的阻塞鎖和相關同步器(信號量、事件,等等)提供一個框架。此類的設計目標是成爲依靠單個原子 int 值來表示狀態的大多數同步器的一個有用基礎。
3.7 LockSupport
LockSupport爲經常使用類,用來建立鎖和其餘同步類的基本線程阻塞原語。LockSupport的功能和"Thread中的 Thread.suspend()和Thread.resume()有點相似",LockSupport中的park() 和 unpark() 的做用分別是阻塞線程和解除阻塞線程。可是park()和unpark()不會遇到「Thread.suspend 和 Thread.resume所可能引起的死鎖」問題。
3.8 CountDownLatch
CountDownLatch爲經常使用類,它是一個同步輔助類,在完成一組正在其餘線程中執行的操做以前,它容許一個或多個線程一直等待。
3.9 Semaphore
Semaphore爲經常使用類,其是一個計數信號量,從概念上講,信號量維護了一個許可集。若有必要,在許可可用前會阻塞每個 acquire(),而後再獲取該許可。每一個 release() 添加一個許可,從而可能釋放一個正在阻塞的獲取者。可是,不使用實際的許可對象,Semaphore 只對可用許可的號碼進行計數,並採起相應的行動。一般用於限制能夠訪問某些資源(物理或邏輯的)的線程數目。
3.10 CyclicBarrier
CyclicBarrier爲經常使用類,其是一個同步輔助類,它容許一組線程互相等待,直到到達某個公共屏障點 (common barrier point)。在涉及一組固定大小的線程的程序中,這些線程必須不時地互相等待,此時 CyclicBarrier 頗有用。由於該 barrier 在釋放等待線程後能夠重用,因此稱它爲循環 的 barrier。
3.11 ReentrantLock
ReentrantLock爲經常使用類,它是一個可重入的互斥鎖 Lock,它具備與使用 synchronized 方法和語句所訪問的隱式監視器鎖相同的一些基本行爲和語義,但功能更強大。
3.12 ReentrantReadWriteLock
ReentrantReadWriteLock是讀寫鎖接口ReadWriteLock的實現類,它包括Lock子類ReadLock和WriteLock。ReadLock是共享鎖,WriteLock是獨佔鎖。