AtomicReference compareAndSet: ссылка на строку и равенство значений - PullRequest
2 голосов
/ 11 декабря 2019

допустим, у вас есть:

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") в следующих сценариях.

  1. x2 и x3 - это одна и та же ссылка, т.е. x2 == x3
  2. Это не так, т.е. x2! = x3 (но x2.equals (x3))

Насколько я понимаю, в сценарии 2 обновление будет неудачным, то есть ok2 будет ложным.

Если мое понимание верно, каков наилучший способ воспроизвести это поведение с равенством значений? Другими словами, как бы вы настроили атомарную операцию compareAndSet, которая работает на равенство строк (т.е. эффективно ok == true в обоих сценариях)?

Спасибо

...