Java面试题更新 2026-08-03

请说明你使用过哪些 Java 原子类,并描述它们各自的特点、适用场景以及底层实现原理。

考察说明

考察候选人对 Java 原子类的掌握程度,包括分类、原理和典型应用。

回答思路

  1. 【回答框架 1】原子类位于 java.util.concurrent.atomic 包,主要分为基本类型原子类(AtomicInteger、AtomicLong、AtomicBoolean)、数组原子类(AtomicIntegerArray 等)、引用原子类(AtomicReference、AtomicStampedReference、AtomicMarkableReference)和字段更新器(AtomicIntegerFieldUpdater 等)。
  2. 【回答框架 2】底层实现基于 CAS(比较并交换)和 volatile 变量,通过 Unsafe 类提供硬件级别的原子操作,保证单个变量的原子性,避免 synchronized 的重量级开销。
  3. 【回答框架 3】适用范围:计数器、序列生成、状态标志等高频更新场景;ABA 问题可通过 AtomicStampedReference 或 AtomicMarkableReference 解决。
  4. 【回答框架 4】在 Java 8 之后,LongAdder 和 LongAccumulator 通过分段累加减少竞争,适用于高并发统计场景。
  5. 【关键点 1】原子类涵盖基本类型、数组、引用和字段更新器四大类。
  6. 【关键点 2】核心原理是 CAS 操作,依赖 Unsafe 类实现硬件级原子性。
  7. 【关键点 3】CAS 存在 ABA 问题,可用版本号或标记解决。
  8. 【关键点 4】LongAdder 通过分段累加提升高并发写入性能。
  9. 【关键点 5】原子类仅保证单个变量的原子性,复合操作需配合锁或事务。
  10. 【易错点 1】误以为原子类可以替代所有同步场景,忽略复合操作的原子性需求。
  11. 【易错点 2】忽略 ABA 问题在无锁算法中的影响。
  12. 【易错点 3】高并发下 AtomicLong 可能因自旋竞争导致性能下降,应优先考虑 LongAdder。