帶有 synchronized 關鍵字的方法代表這個方法加鎖。恰當而又靈活地運用 synchronized 關鍵字,是多執行緒程式設計的必修課。
1、synchronized關鍵字的作用域有二種:
1)是某個物件例項內,synchronized amethod(){}可以防止多個執行緒同時訪問這個物件的synchronized方法(如果乙個物件有多個synchronized方法,只要乙個執行緒訪問了其中的乙個synchronized方法,其它執行緒不能同時訪問這個物件中任何乙個synchronized方法)。這時,不同的物件例項的 synchronized方法是不相干擾的。也就是說,其它執行緒照樣可以同時訪問相同類的另乙個物件例項中的synchronized方法;
2)是某個類的範圍,synchronized static astaticmethod(){}防止多個執行緒同時訪問這個類中的synchronized static 方法。它可以對類的所有物件例項起作用。
2、除了方法前用synchronized關鍵字,synchronized關鍵字還可以用於方法中的某個區塊中,表示只對這個區塊的資源實行互斥訪問。用法是: synchronized(this),它的作用域是當前物件。
synchronized(this)用於定義乙個臨界區(即是:其後面大括弧所包含的部分),以保證在多執行緒下只能有乙個執行緒可以進入this物件的臨界區。 也就是說synchronized(物件或者變數){},表示在{}內的這段**中,對(物件或者變數)中的物件或者變數進行同步處理,也就是說當訪問這段**時,乙個執行緒對物件或者變數的訪問完成後才能夠交給另外乙個執行緒,即有了同步鎖。使用 synchronized(物件或者變數),就是為了防止物件或者變數被同時訪問,避免多個執行緒修改和讀取物件或者變數同時出現的時候,使用這個物件或者變數的地方出現錯誤的判斷,如 while(物件或者變數)。
3、synchronized關鍵字是不能繼承的,也就是說,基類的方法synchronized f(){} 在繼承類中並不自動是synchronized f(){},而是變成了f(){}。繼承類需要你顯式的指定它的某個方法為synchronized方法。
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可以用在方法上也可以使用在 塊中,其中方法是例項方法和靜態方法分別鎖的是該類的例項物件和該類的物件。而使用在 塊中也可以分為三種,具體的可以看上面的 這裡的需要注意的是 如果鎖的是類物件的話,儘管...