synchronized雜談

berber78發表於2015-06-12

synchronized 控制對類成員變數的訪問:每個類例項可對應一把鎖,每個 synchronized 例項方法都必須獲得呼叫該方法的類例項的鎖方能執行,否則所屬執行緒阻塞,方法一旦執行,就獨佔該鎖,直到從該方法返回時才將鎖釋放,此後被阻塞的執行緒方能獲得該鎖,重新進入可執行狀態。這種機制確保了同一時刻對於每一個類例項,其所有宣告為 synchronized 的成員函式中至多隻有一個處於可執行狀態(因為至多隻有一個能夠獲得該類例項對應的鎖),從而有效避免了類成員變數的訪問衝突(只要所有可能訪問類成員變數的方法均被宣告為 synchronized)。

synchronized 控制對類的靜態成員變數的訪問:每一個類也可對應一把鎖,從而可將類的靜態成員函式宣告為 synchronized ,以控制其對類的靜態成員變數的訪問。