工具類
工具類作用
工具類加鎖方法
工具類釋放鎖方法
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
nonfairtryacquir
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
共享鎖獲取執行結果的執行緒(可以有多個)一直阻塞,直到執行任務的執行緒執行完畢,或者執行任務被取消。
AQS的幾個同步元件
乙個執行緒或多個執行緒一直等待,直到其他執行緒執行的操作完成才繼續執行。應用 平行計算。計數器是不能重計的,計數值不能往上加,類似操作只有一次。使用時首先new乙個countdownlatch,構造方法中放入計數,然後在乙個執行緒中呼叫await方法,這個執行緒就會進入等待狀態,其他執行緒中呼叫co...
AQS同步工具類對比
工具類 工具類作用 工具類加鎖方法 工具類釋放鎖方法 sync覆蓋的方法 sync非覆蓋的重要方法 state的作用 鎖型別鎖維護 semaphore 控制同時訪問某個特定資源的運算元量 acquire 每次請求乙個許可都會導致計數器減少1,一旦達到了0,新的許可請求執行緒將被掛起 release ...
Java併發之AQS原理詳解
一 abstractqueuedsynchronizer 的用途 下面簡稱 aqs,jdk 1.8 aqs是借助 fifo等待佇列,用來實現同步器的同步框架,通俗的來說,它是用來實現鎖的工具,一般來說,它需要實現這些功能 二 aqs 的工作原理 aqs的核心是基於鍊錶實現的 fifo等待佇列,該佇列...