gpt4 book ai didi

java - CopyOnWrite 中 volatile 字段的使用

转载 作者:行者123 更新时间:2023-11-29 04:42:57 25 4
gpt4 key购买 nike

写时复制的“标准”代码如下:

...
private volatile SomeClass object;

private ReentrantLock lock = new ReentrantLock();

public change (...) {
lock.lock(); //set lock on write
try {
SomeClass newObject = new SomeClass();
//do something with new object
...
//set new object
object = newObject;
} finally {
lock.unlock(); //release lock
}
}

public Object getSomeField () {
SomeClass obj = object;
return obj.getSomeField();
}

问题:为什么字段保持对“写时保护”对象的引用是不稳定的吗? (例如,参见 CopyOnWriteArrayList 的实现)。据我所知对象引用赋值操作是原子的,所以看起来不需要 volatile 修饰符。我错了吗?

最佳答案

As far as I know the object reference assignment operation is atomic

是的,但是 volatile modifier与原子赋值无关,它与此变量的值对于读取此变量的所有线程都是相同的有关。

它实际上是关于原子变量访问,而不是关于原子变量赋值。

关于java - CopyOnWrite 中 volatile 字段的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38421141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com