【java】synchronized修飾靜態方法和非靜態方法的區別

synchronized在靜態方法上表示調用前要獲得類的鎖,而在非靜態方法上表示調用此方法前要獲得對象的鎖。
public class StaticSynDemo {

private static String a="test";

//等同於方法print2
public synchronized void print1(String b){ //調用前要取得StaticSynDemo實例化後對象的鎖
   System.out.println(b+a);
}
public void print2(String b){
   synchronized (this) {//取得StaticSynDemo實例化後對象的鎖
    System.out.println(b+a);
   }
}
//等同於方法print4
public synchronized static void print3(String b){//調用前要取得StaticSynDemo.class類的鎖
   System.out.println(b+a);
}
public static void print4(String b){
   synchronized (StaticSynDemo.class) { //取得StaticSynDemo.class類的鎖
    System.out.println(b+a);
   }
}

}

發佈了17 篇原創文章 · 獲贊 2 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章