java - 在处理器类中使用实例变量可能会导致竞争条件吗?
问题描述
我将一个实例变量简单地初始化为 null,并将其设置在处理器类的后续方法中。如果事务使用处理器缓存运行,这可能会导致竞争条件吗?
代码类似于
Object customObject = null;
@Override
public void initialize(anotherCustomerObj anotherCustom) throws Exception{
customObject = anotherCustom.getCustomObject();
}
解决方案
是的。
想象一下你有两个线程
线程 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
(该字段不是易失性的,因此不能保证更新的可见性)。
推荐阅读
- python - 在没有冗余代码/文档字符串的情况下,在 python 类中转发/重定向方法/属性的最佳方法?
- r - R - 制作美国各州热图时遇到问题
- java - 为什么我的android存储库中这个RxJava代码中的线程切换
- node.js - 创建功能性购物车的工具
- maven - 詹金斯 kubernetes 管道 dsl 不读取容器定义
- python - 动态创建和命名 Spark DF
- java - 为什么我的输出文件向后打印付款信息?
- vue-router - 使用命名路由器链接时未捕获的错误缺少参数
- google-sheets - 在查询结果中添加可变文本(连续小写字母)
- java - 粘贴不同样式的文本时,TextView 和 EditText 不支持