допустим, у вас есть:
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.equals (x3))
Насколько я понимаю, в сценарии 2 обновление будет неудачным, то есть ok2 будет ложным.
Если мое понимание верно, каков наилучший способ воспроизвести это поведение с равенством значений? Другими словами, как бы вы настроили атомарную операцию compareAndSet, которая работает на равенство строк (т.е. эффективно ok == true в обоих сценариях)?
Спасибо