class Employee {
transient Department = new Department();
}
class Department {
boolean isClosed;
}
默认情况下isClosed
为假,在我的逻辑中的某些点它更改为true
(Department.isClosed = true
),但后来在处理过程中它更改回false
==>没有逻辑显式地改变它。
根据我的理解,我怀疑这是由于竞争条件而发生的,其中不同的线程修改了此标志或一个线程没有获得更新的数据视图。
有办法证明这种理解吗?或者其他嫌疑人?
请注意,很难(总共8-10小时的重试和处理)重现这个问题,因为我们很少在生产中遇到。
如果isClosed
被修改,然后从不同的线程访问,则需要将其设置为volatile。在另一种情况下,不同的线程可能在看到一个最新的值之后看到一个过时的值。