Java併發程式設計之鎖機制之引導篇

AndyandJennifer發表於2018-10-11

該文章屬於《Java併發程式設計》系列文章,如果想了解更多,請點選《Java併發程式設計之總目錄》

前言

在前面的文章中。我們瞭解了volatile、瞭解了synchronized。現在我們來了解一下Java SE 5之後新增加的Lock介面(以及相關實現類)實現的鎖功能。在閱讀該系列文章之前,希望你已經掌握了volatile原理及CAS操作原理。如果你對上述提到的兩個知識點不是很熟悉或者瞭解。那麼建議從整個Java記憶體模型的設計及相關知識點開始瞭解,欲知詳情,請點選--->《Java併發程式設計之總目錄》。

concurrent包的設計

要了解Java為我們提供的基於Lock介面(以及相關實現類)實現的鎖功能,我們首先要看一下整個concurrent包下的設計。具體設計如下所示:

current.png
在上圖中,我們大致可以看出courrent包下的整體結構。整個包大致分為了三層。

  • 高層:Lock、同步器、阻塞佇列等。
  • 中層:AQS(AbstractQueuedSynchronizer)、非阻塞資料結構、原子變數類。
  • 底層:volatile變數的讀/寫、CAS操作。

其中每個層中的依賴關係也很明顯,AQS,非阻塞資料結構和原子變數類(java.util.concurrent.atomic包中的類),都是基於底層實現,而高層類又依賴中層這些基礎類。特別需要注意的是於Lock介面(以及相關實現類)相關的鎖功能在整個高層中起著非常重要的重要。雖然沒有直接在圖中表述Lock介面在高層中的關係,但是在高層中我們所羅列的同步器、阻塞佇列、併發容器等,或多或少都依賴或使用其Lock介面(以及相關實現類)實現的鎖功能。

所以瞭解Lock介面以及相關實現類,對我們認識整個Java併發的機制與設計起著尤為重要的作用。

Lock介面(以及相關實現類)UML類圖

總所周知鎖是用來控制多個執行緒訪問共享資源的方式,一般來說,一個鎖就能夠防止多個執行緒同時訪問共享資源(但是有些鎖可以允許多執行緒併發的訪問共享資源,比如我們後期將會講解的讀寫鎖),在Lock介面出現之前,Java程式是靠synchronized關鍵字來實現鎖功能的,而Java SE 5之後,併發包中新增了Lock介面以及相關實現類,來實現鎖的功能。 關於 Lock介面(以及相關實現類)的UML類圖,具體如下所示:

繼承關係圖

關於上圖中涉及到的類,我都簡單的描述了出來,並沒有詳細的將每個類中的方法描述出來。因為我覺得前期大家只要瞭解其中的使用關係就行了。後續的相關文章會對其中涉及到的類及使用會有具體的描述。(如果在手機端閱覽的同學,圖片有可能不是很清楚,建議直接在PC端閱讀

從上圖中我們發現整個Lock介面以及相關實現類關係還算比較複雜,所以準備分為以下幾個部分來介紹:

相信大家看完這系列文章之後,對大家會有所幫助。喜歡我的小夥伴們,不要加我微信啊,給我點贊就行了。你的支援就是對我最大的鼓勵。愛你喲~~~

相關文章