AtomicInteger中的“比较并设置”如何工作

AtomicInteger中的“比较并设置”如何工作,第1张

AtomicInteger中的“比较并设置”如何工作

原子对象利用Compare和Swap机制使它们成为原子-
即可以保证该值 指定的 ,并且现在 是新值。

您发布的代码不断尝试将当前值设置为比以前大一的值。请记住,另一个线程也可能执行了

get
并且正在尝试设置它。如果两个线程相互竞争以更改值,则增量之一可能会失败。

请考虑以下情形:

  1. 线程1调用
    get
    并获取值
    1
  2. 线程1计算
    next
    2
  3. 线程2调用
    get
    并获取值
    1
  4. 线程2计算
    next
    2
  5. 两个线程都尝试写入值。

现在,因为原子能的- 只有一个线程会成功 ,对方将收到

false
来自
compareAndSet
和再绕过去。

如果不使用此机制,则两个线程都很有可能增加该值,从而导致实际上仅执行一次增量。

for(;;)
只有在许多线程同时写入变量的情况下,令人困惑的无限循环才会真正循环。在非常重的负载下,它可能会循环几次,但是应该很快完成。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5461948.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存