Рассмотрим следующий код, я хочу сделать его потокобезопасным классом, чтобы он никогда не получал нечетное число:
class Test {
private int value = 0;
private final Object lock;
public void add() {
synchronized (lock) {
value++;
value++;
}
}
public int getValue() {
synchronized (lock) {
return value;
}
}
}
Теперь я сомневаюсь в поле блокировки, которое объявлено окончательным, будет ли это иметь значение? или это нарушит безопасность потока?
Я думаю, что если поле блокировки не объявлено окончательным, это должен быть безопасный класс потока -. Если этот вывод неверен, пожалуйста, поправьте меня, спасибо.