微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决这个java代码中可能存在竞争条件?

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

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

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

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

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

解决方法

如果 isClosed 被修改,然后从不同的线程访问,您需要使其变得易变。在另一种情况下,即使在看到更新的值后,其他线程也可能会看到过时的值。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。