Java併發包下鎖學習第一篇:介紹及學習安排

Java併發包下鎖學習第一篇:介紹及學習安排

在Java併發編程中,實現鎖的方式有兩種,分別是:可以使用同步鎖(synchronized關鍵字的鎖),還有lock接口下的鎖。從今天起,凱哥將帶領大家一起豪華參觀(詳細講解)在Java併發包(JUC)下locks包下的體系結構。

在這個系列中,我們將會學習併發包下鎖實現的原理(我們將跟著源碼來分析)、什麼是可重入鎖、公平鎖和非公平鎖怎麼定義的、為什麼synchronized關鍵字的鎖和ReentrantLock默認會選擇非公平鎖?讀寫鎖和獨佔鎖的比較、跟著源碼我們來分析讀寫鎖等和鎖相關的知識。學完這個系列教程後,大家將對併發鎖有更新的理解,歡迎大家一起學習。

本篇是《凱哥(凱哥Java:kagejava)併發編程學習》系列之《Lock系列》教程的第一篇:《Java併發包下鎖學習第一篇》

本文主要內容:java中鎖定義及在jdk5以後的併發包(JUC)下鎖相關的類及類關係圖;怎麼學習JUC下鎖

凱哥講解一般步驟:先舉生活中的例子,然後從例子中總結,然後在用代碼演示。經過這三個步驟來加深大家的印象。

一:鎖的理解

在多線程場景下,多個線程要操作同一個資源,這個被競爭的資源就是共享資源。當同時有多個線程一起競爭共享資源的時候,如果一個線程競爭到了這個資源,就需要使用一個手段或者是技術通知其他線程,這個資源已經被佔用著,其他線程需要等待才可以。基於這種思想,在我們現實生活中,如何讓其他人知道某個東西是你的呢?貼上你的名字、打上標識或者是用一把鎖鎖著。這樣別人就競爭不了了。鎖就是這個通知其他人(或線程)的一種手段。所以,在多線程環境下,就是用了這種技術來實現對共享資源的控制。

二:JUC下locks包下體系

我們先來看看JUC下的locks包都有哪些類或接口。

JUC包下鎖相關的類:

Java併發包下鎖學習第一篇:介紹及學習安排


上圖中類之間的關係可以簡單如下圖:

鎖之間類圖關係:

Java併發包下鎖學習第一篇:介紹及學習安排


更簡單明瞭的如下圖:

Java併發包下鎖學習第一篇:介紹及學習安排


三:類介紹

AbstractOwnableSynchronizer:隊列同步器。

該類是用來構建鎖或者其他同步組件的基礎框架的頂級抽象類。有兩個子類

Java併發包下鎖學習第一篇:介紹及學習安排


AbstractQueuedLongSynchronizer:是AbstractQueuedSynchronizer類的另一個版本類。區別就在原AbstractQueuedLongSynchronizer類裡面狀態碼使用Long類型的而非int類型的。凱哥在以後文章中將詳細介紹AbstractQueuedSynchronizer類的。

AbstractQueuedSynchronizer:隊列同步器。

使用比較多的。是構建鎖或者其他同步組建的基礎框架。其通過一個int成員變量來表示同步狀態的。通過內部類Node來實現FIFO(first-in-first-out:即先進先出)的隊列來完成獲取資源線程排隊的操作。

Java併發包下鎖學習第一篇:介紹及學習安排


Lock:

排他鎖的頂級接口。

RenntrantLock:

Lock的實現類。可重入鎖。內部有公平鎖和非公平鎖兩個內部類。

Java併發包下鎖學習第一篇:介紹及學習安排


ReadWriteLock:

讀寫鎖的頂級接口

ReentrantReadWriteLock:

讀寫鎖的子類。內部有讀鎖和寫鎖兩個內部類來控制著讀寫分離操作的。

LockSupport:

當要執行阻塞或者是喚醒一個線程的時候,都會使用到lockSupport這個工具類來實現的。

Java併發包下鎖學習第一篇:介紹及學習安排


Condition:

監視對象。與lock對象配合使用來實現等待/通知模式

Java併發包下鎖學習第一篇:介紹及學習安排


四:學習安排

通過上面介紹我們對併發包下的locks包有所瞭解了。在接下來的學習中,我們將會按照上面類介紹的順序來學習。先學習同步隊列,跟著源碼來分析主要API;在學習排他鎖;然後再學習讀寫鎖;最後學習後面兩個類。


分享到:


相關文章: