顯式鎖(java.util.Concurrent) 原

一、前言

  在分析完了集合框架後,很有必要接着分析java併發包下面的源碼,JUC(java.util.concurrent)源碼也是我們學習Java邁進一步的重要過程。我們分爲幾個模塊進行分析,首先是對鎖模塊的分析。

二、鎖框架圖

  在Java併發中,鎖是最重要的一個工具,因爲鎖,才能實現正確的併發訪問,所以,先從鎖入手一步步進行分析,鎖的框架圖如下。

  

    說明:在鎖結構框架中乃至併發框架中,AbstractQueuedSynchronizer都佔有舉足輕重的地位,同時LockSupport也是非常重要的類。

三、具體說明

  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對象。

  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是獨佔鎖。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章