首页 > 解决方案 > 在处理器类中使用实例变量可能会导致竞争条件吗?

问题描述

我将一个实例变量简单地初始化为 null,并将其设置在处理器类的后续方法中。如果事务使用处理器缓存运行,这可能会导致竞争条件吗?

代码类似于

 Object customObject = null;

 @Override
 public void initialize(anotherCustomerObj anotherCustom) throws Exception{
 customObject = anotherCustom.getCustomObject();

 }

标签: java

解决方案


是的。

想象一下你有两个线程

线程 1

thing.initialize(foo);  // Operation 1
thing.doSomething();    // Operation 2

线程 2

thing.intialize(bar);   // Operation 3
thing.doSomething();    // Operation 4

想象一下调度器按以下顺序调度这些操作:1、3、2、4

操作 2 将根据foo或操作bar(该字段不是易失性的,因此不能保证更新的可见性)。


推荐阅读