Могу ли я использовать синхронизированное с конечным полем?

Рассмотрим следующий код, я хочу сделать его потокобезопасным классом, чтобы он никогда не получал нечетное число:

class Test {
  private int value = 0;
  private final Object lock;

  public void add() {
    synchronized (lock) {
      value++;
      value++;
    }
  }

  public int getValue() {
    synchronized (lock) {
      return value;
    }
  } 
}

Теперь я сомневаюсь в поле блокировки, которое объявлено окончательным, будет ли это иметь значение? или это нарушит безопасность потока?

Я думаю, что если поле блокировки не объявлено окончательным, это должен быть безопасный класс потока -. Если этот вывод неверен, пожалуйста, поправьте меня, спасибо.

5
задан alaska 13 July 2012 в 20:36
поделиться