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);
}
}
}