可能的竞争条件在这个java代码?


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

默认情况下isClosed为假,在我的逻辑中的某些点它更改为true(Department.isClosed = true),但后来在处理过程中它更改回false==>没有逻辑显式地改变它。

根据我的理解,我怀疑这是由于竞争条件而发生的,其中不同的线程修改了此标志或一个线程没有获得更新的数据视图。

有办法证明这种理解吗?或者其他嫌疑人?

请注意,很难(总共8-10小时的重试和处理)重现这个问题,因为我们很少在生产中遇到。

如果isClosed被修改,然后从不同的线程访问,则需要将其设置为volatile。在另一种情况下,不同的线程可能在看到一个最新的值之后看到一个过时的值。

最新更新