【发布时间】:2015-01-02 18:31:32
【问题描述】:
为了以原子方式更新两个或更多 volatile 变量,是否需要使用带同步、可重入读写锁等的锁来保护它?
即
volatile int vVar1, vVar1; // or AtomicInteger
/*** Needs to be updated atomically ***/
void atomicUpdate(int var1, int var2){
vVar1 = var1;
vVar2 = var2;
}
同样的代码用于 java.util.concurrent.atomic 变量。
【问题讨论】:
-
S简短的回答,是的,现在这似乎是一个 XY problem,所以你为什么不退后一步告诉我们你想做什么?
-
我想在多线程环境中自动更新我的两个变量。
-
我说退一步。您有两个
volatile变量的事实表明您的底层设计似乎存在问题。因此,我的建议是退后一步,告诉我们你想做什么。 -
是的,volatile 保证可见性并在 var 写入与其后续读取之间的关系之前建立。它与两个不同内存位置上操作的原子性没有任何关系。
标签: java multithreading scala atomic volatile