并发编程 原子类

本文将介绍并发编程中的原子类。

一、什么是原子类?

JUC 提供了一系列原子类,它们能够在无需加锁的情况下解决原子性问题。

具体请看:

并发编程 可见性、原子性、有序性 - 原子性

并发编程 可见性、有序性、原子性的解决 - 原子性的解决

二、原子类的实现原理

通过 CAS + 自旋实现,具体请看:

并发编程 CAS

三、常见原子类

1. 引用类型

引用类型的原子类封装,支持 “比较对象地址并交换” 功能。

其中,

  • AtomicReference
  • AtomicStampedReference:可以解决 ABA 问题和指针问题,解决方式是:每次执行操作时,额外更新一个版本号,保证版本号递增
  • AtomicMarkableReference:可以缓解 ABA 问题和指针问题,其工作方式是:每次执行操作时,更新类型为 boolean 的标记

2. 累加器

累加器的原子性封装。

DoubleAccumulator、DoubleAdder、LongAccumulator 和 LongAdder 用于执行累加操作,它们的性能更好。

参考

  • Java 并发编程实战