顯式鎖(java.util.Concurrent)

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

相關文章
相關標籤/搜索