synchronized關鍵字的理解

2021-07-28 19:39:10 字數 843 閱讀 2927

synchronized塊:鎖定的是指定物件,**塊只是鎖定期間執行的操作。

synchronized修飾非靜態方法,鎖定的是該類的例項,同乙個例項(單例)在多執行緒中呼叫才會觸發同步鎖定,所以,多個被synchronized修飾的非靜態方法在同一例項下,只能多執行緒同時呼叫乙個

synchronized修飾靜態方法,鎖定的是類的本身,而不是例項,同乙個類所有被synchronized修飾的靜態方法,只能多執行緒同時執行其中乙個。

其它未獲得鎖的執行緒需要等待獲得鎖的執行緒執行完成並釋放鎖。

重入鎖:

public synchronized void methoda(int a,int b){};

public synchronized void methodb(int a )

加在非static方法上的synchronized方法是和synchronized(this)是等價的,均為物件鎖,即對this加鎖。、

獲得了當前物件鎖的執行緒,可以繼續獲得當前物件鎖,jvm負責跟蹤物件被加鎖的次數。執行緒執行b方法,此時如果this鎖可以使用,執行緒獲得該鎖,執行緒給物件加鎖,計數器變為1,然後b方法呼叫了a方法,由於是同乙個物件同乙個執行緒,執行緒可以繼續獲得鎖,計數器變為2,表示this被加鎖兩次,a方法執行完畢後,執行緒釋放鎖,計數器變為1,此時物件鎖對其他執行緒依然是不可獲得的。b方法執行完畢後,執行緒繼續釋放鎖,此時計數器變為0,表示鎖完全釋放,其它執行緒可以獲取物件鎖。

要明白兩個問題,1.鎖的物件是誰,2.誰持有了鎖

假設方法a和b是同乙個類test的兩個方法,

test t = new test(); t.methodb(1);

可以,乙個執行緒對同乙個物件的鎖可以反覆獲取。這種同步鎖稱為可重入鎖。

synchronized關鍵字解析

一 修飾方法 1.修飾普通方法 對呼叫此方法的物件加鎖 2.修飾static方法 對呼叫此方法的類的所有物件加鎖 3.不能修飾構造方法,但是可以在構造方法內部修飾 塊 二 修飾 塊 1.synchronized this 相當於修飾普通方法 2.synchronized a.class 相當於修飾s...

解讀synchronized關鍵字

size large 最近在寫多執行緒程式,網上收集總結了synchronized的用法,結果如下 size 1 synchronized關鍵字的作用域有二種 1 是某個物件例項內,synchronized amethod 可以防止多個執行緒同時訪問這個物件的synchronized方法 如果乙個物...

synchronized 關鍵字分析

synchronized是典型的可衝入鎖,jdk1.5之後做了較大的優化 如圖,synchronized可以用在方法上也可以使用在 塊中,其中方法是例項方法和靜態方法分別鎖的是該類的例項物件和該類的物件。而使用在 塊中也可以分為三種,具體的可以看上面的 這裡的需要注意的是 如果鎖的是類物件的話,儘管...