Зачем синхронизировать элемент статической блокировки, а не класс?
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
Другой код может сломать ваш, выполнив synchronized(Bob.class)
. Если они это сделают, ваш код вдруг соревнуется со своим кодом для блокировки, возможно, нарушив ваш код.
Эта опасность удаляется, если объект lock
недоступен из-за объекта, который ему нужен.