如何解决这个java代码中可能存在竞争条件?
class Employee {
transient Department = new Department();
}
class Department {
boolean isClosed;
}
默认情况下 isClosed
是假的,我的逻辑中的某些点更改为 true
(Department.isClosed = true
) 但后来在处理过程中更改回 false
==> 否显式改变这一点的逻辑。
根据我的理解,我怀疑这是由于竞争条件而发生的,其中不同的线程修改了这个标志,或者一个线程没有获得更新的数据视图。
有没有办法证明这种理解?或者可能有其他嫌疑人?
请注意,由于我们在生产中很少遇到此问题,因此很难(总共 8-10 小时的重试和处理时间)重现此问题。
解决方法
如果 isClosed
被修改,然后从不同的线程访问,您需要使其变得易变。在另一种情况下,即使在看到更新的值后,其他线程也可能会看到过时的值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。