AQS同步工具類對比

2021-09-12 05:55:10 字數 2085 閱讀 3674

工具類

工具類作用

工具類加鎖方法

工具類釋放鎖方法

sync覆蓋的方法

sync非覆蓋的重要方法

state的作用

鎖型別鎖維護

semaphore

控制同時訪問某個特定資源的運算元量

acquire:每次請求乙個許可都會導致計數器減少1,,一旦達到了0,新的許可請求執行緒將被掛起

release:每呼叫 新增乙個許可,釋放乙個正在阻塞的獲取者

tryacquireshared

tryreleaseshared

表示初始化的許可數

共享鎖每一次請求acquire()乙個許可都會導致計數器減少1,同樣每次釋放乙個許可release()都會導致計數器增加1,一旦達到了0,新的許可請求執行緒將被掛起。

countdownlatch

把一組執行緒全部關在外面,在某個狀態時候放開。一種同步機制來保證乙個或多個執行緒等待其他執行緒完成。

await:在計數器不為0時候阻塞呼叫執行緒,為0時候立即返回

countdown :計數遞減

tryacquireshared 

tryreleaseshared

維護乙個計數器

共享鎖初始化乙個計數,每次呼叫countdown方法計數遞減,在計數遞減到0之前,呼叫await的執行緒都會阻塞

reentrantlock

標準的互斥操作,也就是一次只能有乙個執行緒持有鎖

lock:如果沒有執行緒使用則立即返回,並設定state為1;如果當前執行緒已經占有鎖,則state加1;如果其他執行緒占有鎖,則當前執行緒不可用,等待 trylock:如果鎖可用,則獲取鎖,並立即返回值 true。如果鎖不可用,則此方法將立即返回值 false

unlock:嘗試釋放鎖,如果當前執行緒占有鎖則count減一,如果count為0則釋放鎖。如果占有執行緒不是當前執行緒,則拋異常

tryacquire 

tryrelease

nonfair

tryacquire

state表示獲得鎖的執行緒對鎖的重入次數。

排他鎖。

獲取鎖時,如果沒有執行緒使用則立即返回,並設定state為1;如果當前執行緒已經占有鎖,則state加1;如果其他執行緒占有鎖,則當前執行緒不可用。釋放鎖時,在該方法中主要作用是state狀態位減少release個,表示釋放鎖,如果更新後的state為0,表示當前執行緒釋放鎖,如果不為0,表示持有鎖的當前執行緒重入數減少

reentrantreadwritelock

讀寫鎖。允許多個讀執行緒同時持有鎖,但是只有乙個寫執行緒可以持有鎖。寫執行緒獲取寫入鎖後可以再次獲取讀取鎖,但是讀執行緒獲取讀取鎖後卻不能獲取寫入鎖

readlock#lock :獲取讀鎖 readlock#trylock:嘗試當前沒有其他執行緒當前持有寫鎖時獲取讀鎖 writelock#lock:獲取寫鎖 writelock#trylock:嘗試當前沒有其他執行緒持有寫鎖時,呼氣寫鎖。

readlock#unlock:釋放讀鎖 writelock#unlock:釋放寫鎖

acquireshared 

releaseshared

tryacquire 

tryrelease

tryreadlock

trywritelock

高16位表示共享鎖的數量,低16位表示獨佔鎖的重入次數

讀鎖:共享 寫鎖:排他

對於共享鎖,state是計數器的概念。乙個共享鎖就相對於一次計數器操作,一次獲取共享鎖相當於計數器加1,釋放乙個共享鎖就相當於計數器減1;排他鎖維護類似於可重入鎖。

futuretask

封裝乙個執行任務交給其他執行緒去執行,開始執行後可以被取消,可以檢視執行結果,如果執行結果未完成則阻塞。

v get()

run() set(v) cancel(boolean)

tryacquireshared 

tryreleaseshared

innerget innerrun() innerset inneriscancelled

state狀態位來儲存執行狀態running、run、cancelled

共享鎖獲取執行結果的執行緒(可以有多個)一直阻塞,直到執行任務的執行緒執行完畢,或者執行任務被取消。

Java之 AQS在幾個同步工具類中的使用

工具類 工具類作用 工具類加鎖方法 工具類釋放鎖方法 sync覆蓋的方法 sync非覆蓋的重要方法 state的作用 鎖型別鎖維護 semaphore 控制同時訪問某個特定資源的運算元量 acquire 每次請求乙個許可都會導致計數器減少1,一旦達到了0,新的許可請求執行緒將被掛起 release ...

同步工具類

同步工具類可以是任何乙個物件,只要它根據其自身的狀態來協調執行緒的控制流。儲存物件的容器,還能協調生產者和消費者等執行緒之間的控制流 take和put等方法將阻塞,直到佇列達到期望的狀態 佇列即非空,也非滿 相當於一扇門 在閉鎖到達結束狀態之前,這扇門一直是關閉的,並且沒有任何執行緒能通過,當到達結...

同步工具類

同步工具類可以是任何乙個物件,只要它根據其自身的狀態來協調執行緒控制流。阻塞佇列 blockingqueue 可以作為同步工具類,其他型別的同步工具類還包括訊號量 semaphore 柵欄 barrier 以及閉鎖 latch 在平台類庫中還包含其他一些同步工具類的類,如果這些類還無法滿足需要,那麼...