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

}

猜你喜欢

转载自liliugen.iteye.com/blog/1178428
今日推荐