面试题:Java中 有哪些原子类? 它们的原理分别是什么 ?

在Java中,原子类主要位于java.util.concurrent.atomic包中,它们提供了一种在不使用锁的情况下实现线程安全的操作。以下是Java中常见的原子类及其原理:

  1. AtomicInteger
    • 原理:基于CAS(Compare-And-Swap)操作实现。CAS是一种硬件级别的原子操作,它包含三个操作数:内存位置、预期值和新值。如果内存位置的当前值与预期值匹配,则处理器会自动将该位置的值更新为新值,否则不做任何操作。
    • 常用方法get()set()compareAndSet()incrementAndGet()等。
  2. AtomicLong
    • 原理:与AtomicInteger类似,也是基于CAS操作实现,但用于操作long类型的变量。
    • 常用方法get()set()compareAndSet()incrementAndGet()等。
  3. AtomicBoolean
    • 原理:基于CAS操作实现,用于操作boolean类型的变量。
    • 常用方法get()set()compareAndSet()等。
  4. AtomicReference
    • 原理:基于CAS操作实现,用于操作引用类型的变量。
    • 常用方法get()set()compareAndSet()等。
  5. AtomicIntegerArray
    • 原理:基于CAS操作实现,用于操作int类型的数组。
    • 常用方法get()set()compareAndSet()等。
  6. AtomicLongArray
    • 原理:与AtomicIntegerArray类似,也是基于CAS操作实现,但用于操作long类型的数组。
    • 常用方法get()set()compareAndSet()等。
  7. AtomicReferenceArray
    • 原理:基于CAS操作实现,用于操作引用类型的数组。
    • 常用方法get()set()compareAndSet()等。
  8. AtomicStampedReference
    • 原理:基于CAS操作实现,用于解决ABA问题。它通过引入一个stamp(版本号)来避免ABA问题。
    • 常用方法get()set()compareAndSet()等。
  9. AtomicMarkableReference
    • 原理:与AtomicStampedReference类似,但使用一个boolean标记来代替版本号。
    • 常用方法get()set()compareAndSet()等。

总结

Java中的原子类通过CAS操作实现了无锁的线程安全操作,适用于高并发的场景。它们提供了一种高效的方式来更新变量,避免了使用锁带来的性能开销。

THE END
点赞6 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容