class Employee {
   transient Department = new Department();
}   
class Department {
   boolean isClosed;
}

По умолчанию isClosed ложно, в какой-то момент в моей логике он изменился на true (Department.isClosed = true), но позже в процессе он снова изменился на false ==> Нет логики для явного изменить это.

Насколько я понимаю, я подозреваю, что это происходит из-за состояния гонки, когда другой поток изменил этот флаг или один поток не получает обновленное представление данных.

Есть ли способ доказать это понимание? или, возможно, любые другие подозреваемые?

Обратите внимание: воспроизвести эту проблему сложно (всего 8–10 часов повторных попыток и обработки), поскольку на производстве мы сталкиваемся очень редко.

0
Vedant Kekan 12 Фев 2021 в 11:39

1 ответ

Лучший ответ

Вам нужно сделать isClosed изменчивым, если он изменен и затем к нему обращаются из разных потоков. В другом случае другой поток может увидеть устаревшее значение даже после просмотра более актуального значения.

1
Francesco Menzani 12 Фев 2021 в 17:00