在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/

10-08 21:20