为什么要在静态锁定成员而不是类上进行同步?

时间:2013-06-19 20:10:20

标签: java multithreading concurrency

class Bob {
  private static final Object locke = new Object();
  private static volatile int value;

  public static void fun(){
     synchronized(locke){
       value++;
     }
  }      
}

这与班级同步有何不同,即synchronized(Bob.class){...}

1 个答案:

答案 0 :(得分:19)

某些其他代码可以通过执行synchronized(Bob.class)来破坏您的代码。如果他们这样做,您的代码突然与他们的代码争夺锁定,可能会破坏您的代码。

如果无法从需要它的对象外部访问lock对象,则会删除该危险。