【发布时间】:2026-02-12 18:15:02
【问题描述】:
在 Java 中存在一个 AtomicReference 类。这是否意味着设置引用本身不是原子操作?
例如,这不是线程安全的吗(假设返回的值不能被修改)?:
public void someMethod()
{
this.someList = Collections.unmodifiableList(new LinkedList<Object>());
}
public List<Object> getReadOnlyList()
{
return someList;
}
在 C# 中怎么样?
【问题讨论】:
-
您的示例并不完全是线程安全的。如果列表在此处不安全地发布,您可能无法正确阅读内容(尽管
LinkedList的实现可能允许您在它为空的情况下逃脱)。 -
@Tom :您的意思是其他线程可能会为 someList 字段获取旧的缓存值,或者 someList 字段实际上可能是“半写的”?
-
@hatchetman82 我的意思是在读取新引用后,它指向的对象可能没有完全更新。因此,如果我不安全地公开
new java.awt.Point(1, 2),我可能能够在另一个线程中读取该对象,但x和y字段可能仍然为零。
标签: c# java atomicreference