AtomicInteger
  Olt1rl96HKat 2023年12月15日 40 0

假设线程A和线程B两个线程同时执行getAndAddInt操作(分别跑在不同CPU上):

1.AtomicInteger里面的value原始值为3,即主内存中AtomicInteger的value为3,根据JMM模型,线程A和线程B各自持有一份值为3的value的副本分别到各自的工作内存

2.线程A通过getIntVolatile(var1,var2)拿到value值3,这时线程A被挂起。

3.线程B也通过getIntVolatile(var1,var2)方法获取到value值3,此时刚好线程B没有被挂起并执行compareAndSwapInt方法比较内存值也是3,成功修改内存值为4,线程B打完收工,一切ok。

4.这时线程A恢复,执行compareAndSwapInt方法比较,发现自己手里的值数值3和主内存数值4不一致,说明该值已经被其他线程抢先一步修改了,那线程A本次修改失败,只能重新读取重新来一遍了。

5.线程A重新获取value值,因为变量value被volatile修饰,所以其他线程对它的修改,现成A总是能看到,线程A继续执行compareAndSwapInt进行比较替换,直到成功。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月15日 0

暂无评论

推荐阅读
  Olt1rl96HKat   2023年12月15日   41   0   0 AtomicIntegerAtomicInteger
Olt1rl96HKat
作者其他文章 更多

2023-12-22

2023-12-22

2023-12-15

2023-12-15

2023-12-15

2023-12-15

2023-12-15