java原子引用比较数据集:字符串引用与值相等
假设你有:
AtomicReference<String> ref = new AtomicReference<>("");
bool ok1 = ref.compareAndSet(x1, x2); // x1 has value "", x2 has value "test"
bool ok2 = ref.compareAndSet(x3, x4); // x2 has value "test", x4 has value "updated"
在以下场景中,“ok2”的值是多少(因此,“ref”的值是多少)
- x2和x3是同一个参考,即x2==x3
- 它们不是,即x2!=x3(但x2等于(x3))
我的理解是,在场景2中,更新会失败,即ok2是错误的
如果我在这方面的理解是正确的,那么以价值平等的方式再现这种行为的最佳方式是什么?换句话说,您将如何设置一个原子比较数据集操作来处理字符串相等(即在两种情况下都有效地ok==true)
谢谢
# 1 楼答案
您可以通过循环来实现这一点,方法是提取值,比较,然后更新,除非值在提取和尝试更新之间发生变化:
除非有激烈的竞争,否则它不会循环,或者可能循环一次(如果你不走运)或两次(如果你真的很不走运)