Java 并发面试题, 你使用过 Java 中的哪些原子类?
Java 并发面试题, 你使用过 Java 中的哪些原子类?
QA
Step 1
Q:: 你使用过 Java 中的哪些原子类?
A:: Java 提供了多种原子类,主要在 java.util.concurrent.
atomic 包中。这些原子类包括 AtomicBoolean、AtomicInteger、AtomicLong、AtomicReference 等。它们提供了一种线程安全的方式来执行原子操作,避免了使用锁带来的复杂性和开销。
Step 2
Q:: 为什么要使用原子类而不是同步机制?
A:: 原子类使用底层的硬件支持的原子操作,可以比传统的锁更高效地保证线程安全。锁机制可能会导致上下文切换和性能开销,而原子类避免了这些问题,尤其适用于简单的计数和状态更新。
Step 3
Q:: AtomicInteger 和 AtomicLong 的应用场景有哪些?
A:: AtomicInteger 和 AtomicLong 通常用于计数器、累加器等需要高并发访问的场景。例如,统计网站访问量、实现高效的非阻塞计数器等。
Step 4
Q:: 什么是 CAS 操作,Java 原子类如何实现 CAS?
A:: CAS (Compare-And-Swap)
是一种无锁的并发机制。Java 原子类通过使用硬件提供的 CAS 指令来实现原子操作,保证了在多线程环境下的线程安全性。
Step 5
Q:: AtomicReference 有什么用处?
A:: AtomicReference 用于对对象引用进行原子操作。它常用于实现非阻塞算法,比如锁自由链表、并发队列等。
Step 6
Q:: 如何使用 AtomicStampedReference 和 AtomicMarkableReference?
A:: AtomicStampedReference 和 AtomicMarkableReference 提供了带版本戳或标记的引用原子更新机制,常用于解决 ABA 问题。ABA 问题是指在 CAS 操作中,一个值从 A 变成 B 再变成 A,CAS 检查通过但实际上值已经变化。