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

Bin*_*Bob 13 java concurrency multithreading

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

  public static void fun(){
     synchronized(locke){
       value++;
     }
  }      
}
Run Code Online (Sandbox Code Playgroud)

这与课堂上的同步有何不同,即 synchronized(Bob.class){...}

Joa*_*uer 19

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

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

  • @BinaryBob它可能死锁或者一些不相关的代码可能只是长时间保持锁定,阻止你的类进步,即导致[活性问题](http://docs.oracle.com/javase/tutorial/essential/concurrency /liveness.html). (3认同)