原子类体系语义三大缺点分析:ABA问题、无限循环与多变量原子性.pdfVIP

  • 1
  • 0
  • 约小于1千字
  • 约 1页
  • 2026-04-27 发布于北京
  • 举报

原子类体系语义三大缺点分析:ABA问题、无限循环与多变量原子性.pdf

1、ABA问题:如果某个值一开始是A,后来变成了B,然后又变成了A,你本来期望的是值

如果是第一个A才会设置新值,结果第二个A一比较也ok,也设置了新值,跟期望是不符

合的。所以atomic包里有AtomicStampedReference类,就是会比较两个值的是否一致,

如果一致,才会设置新值

假设一开始变量i=1,你先获取这个i的值是1,然后累加了1,变成了2

但是在此期间,别的线程将i-1-2-3-1

这个期间,这个值是改过的,只不过最后将这个值改成了跟你最早看到的值一样的值

结果你后来去compareAndSet的时候,会发现这个i还是1,就将它设置成了2,就设置成

功了

说实话,用AtomicInteger,常见的是计数,所以说一般是不断累加的,所以ABA问题比较

少见

2、无限循环问题:大家看源码就知道Atomic类设置值的时候会进入一个无限循环,只要不

成功,就不停循环再次尝试,这个在高并发修改一个值的时候其实挺常见的,比如你用

AtomicInteger在内存里搞一个原子变量,然后高并发下,多线程频繁修改,其实可能会导致

这个compareAndSet()里要循环N次才设置成功,所以还是要考虑到的。

JDK1.8引入

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档