Подтвердить что ты не робот

Зачем синхронизировать элемент статической блокировки, а не класс?

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

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

Как это отличается от синхронизации в классе, т.е. synchronized(Bob.class){...}

4b9b3361

Ответ 1

Другой код может сломать ваш, выполнив synchronized(Bob.class). Если они это сделают, ваш код вдруг соревнуется со своим кодом для блокировки, возможно, нарушив ваш код.

Эта опасность удаляется, если объект lock недоступен из-за объекта, который ему нужен.