Java: все ли изменяемые переменные должны быть изменчивыми при использовании блокировок?

Должна ли следующая переменная x быть энергозависимой?

Или же манипуляция в блокировке utils.concurrent выполняет ту же функцию, что и синхронизированный блок (гарантируя, что он записан в память, а не сохранен в кэше процессора)?

myMethod(){
  myLock.lock();
  x++;
  myLock.unlock();
}

1 ответ

Решение

Такие переменные должны быть изменчивыми только в том случае, если они доступны в другом месте без блокировки. Например, в качестве быстрого доступа только для чтения к переменной размера. Методы блокировки служат той же цели, что и синхронизированный блок. См. Раздел "Синхронизация памяти" в javadoc для класса Lock.

Другие вопросы по тегам