【问题标题】:Does AtomicReference.compareAndSet(old,new) guarantees old.field wasn't change?AtomicReference.compareAndSet(old,new) 是否保证 old.field 没有改变?
【发布时间】:2021-03-17 17:50:25
【问题描述】:

AtomicReference.compareAndSet(old,new) 是否保证

  1. old.field 没变?
  2. 或者它只是保证old 不是 重新分配给新对象?

如果 2 为真,是否意味着 AtomicReference 仅对像 String 这样的不可变对象有用? (因为在 old 的可变性的情况下,old.field 的更改会丢失并成功 compareAndSet

【问题讨论】:

  • AtomicReference.compareAndSet(expect,update),不是(old,new)
  • 好的,是否可以保证没有更改任何字段?

标签: java multithreading atomicreference


【解决方案1】:

AtomicReference检查引用相等性,不检查字段更改。

因此,它主要只对不可变类型有用。

【讨论】:

  • 那么它只对像字符串这样的不可变对象有用吗?因为在旧的可变性的情况下,old.field 更改会随着 compareAndSet 成功而丢失
  • 是的,基本上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-19
  • 2014-09-27
  • 1970-01-01
  • 2017-10-04
  • 2018-12-19
  • 2021-06-03
  • 2011-07-03
相关资源
最近更新 更多