在Java中,存在一个AtomicReference类。这是否意味着设置引用本身不是原子操作?
例如,这是否不是线程安全的(假设返回的值无法修改)?
public void someMethod()
{
this.someList = Collections.unmodifiableList(new LinkedList<Object>());
}
public List<Object> getReadOnlyList()
{
return someList;
}
在C#中怎么样?
最佳答案
根据Java Language Specification, version 3.0, Section 17.7:
通过AtomicReference,可以执行比较并将其设置为原子 Action 。
这不是线程安全的:
public boolean changeList(List<Object> oldValue, List<Object> newValue) {
if (this.someList == oldValue) {
// someList could be changed by another thread after that compare,
// and before this set
this.someList = newValue;
return true;
}
return false;
}
关于c# - Java中的AtomicReference-在线程安全的环境中设置引用是否必要?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2384309/