Cor*_*ius 5 c# java atomicreference
在Java中,存在AtomicReference类.这是否意味着设置引用本身并不是原子操作?
例如,这是不是线程安全的(假设返回的值不能修改)?:
public void someMethod()
{
this.someList = Collections.unmodifiableList(new LinkedList<Object>());
}
public List<Object> getReadOnlyList()
{
return someList;
}
Run Code Online (Sandbox Code Playgroud)
在C#怎么样?
引用的写入和读取始终是原子的,无论它们是实现为 32 位值还是 64 位值。
AtomicReference 允许将比较和设置作为原子操作执行。
这不是线程安全的:
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;
}
Run Code Online (Sandbox Code Playgroud)