Java併發編程之鎖機制之引導篇

該文章屬於《Java併發編程》系列文章,若是想了解更多,請點擊《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接口以及相關實現類關係還算比較複雜,因此準備分爲如下幾個部分來介紹:post

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

相關文章
相關標籤/搜索