Java: все ли изменяемые переменные должны быть изменчивыми при использовании блокировок?
Должна ли следующая переменная x быть энергозависимой?
Или же манипуляция в блокировке utils.concurrent выполняет ту же функцию, что и синхронизированный блок (гарантируя, что он записан в память, а не сохранен в кэше процессора)?
myMethod(){
myLock.lock();
x++;
myLock.unlock();
}
1 ответ
Решение
Такие переменные должны быть изменчивыми только в том случае, если они доступны в другом месте без блокировки. Например, в качестве быстрого доступа только для чтения к переменной размера. Методы блокировки служат той же цели, что и синхронизированный блок. См. Раздел "Синхронизация памяти" в javadoc для класса Lock.