1. Java并发包中的原子操作类概述
在Java并发编程中,原子操作类是一组非常重要的工具,它们位于java.util.concurrent.atomic包下。这些类提供了一种无锁化的线程安全机制,能够高效地处理单个变量的原子操作。相比传统的synchronized和Lock,原子操作类具有更轻量级、无线程上下文切换开销等优势,是高并发环境下处理简单变量线程安全的首选方案。
原子操作类的核心价值在于:
- 细粒度的变量操作控制
- 无锁化的线程安全保证
- 非阻塞的高性能实现
- 避免了传统锁机制带来的性能损耗
原子操作类最适合处理单个变量的简单原子操作,对于多变量或复杂代码块的原子性保证,仍然需要使用传统的锁机制。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 原子操作的基本概念
2.1 什么是原子操作
原子操作指的是不可分割的操作,一个操作要么全部执行成功,要么全部不执行,不存在任何中间状态。在多线程环境下,原子操作能够保证不会被线程调度器打断,避免了"操作做了一半"的情况。
以常见的i++操作为例,它实际上包含三个独立步骤:
- 从主存读取变量i的当前值
- 在工作内存中对i执行+1操作
- 将修改后的值写回主存
这三个步骤如果被打断,就会导致多线程环境下的计数丢失问题。
2.2 Java实现原子操作的三种方式
Java中实现原子操作主要有三种方式:
| 实现方式 | 核心代表 | 核心思想 | 特点 |
|---|---|---|---|
| 悲观锁 | synchronized、ReentrantLock | 认为一定会有线程竞争,先加锁独占资源 | 阻塞式、粗粒度,开销大 |
| 乐观锁 | atomic原子操作类 | 认为很少线程竞争,不加锁直接尝试更新 | 非阻塞式、细粒度,开销小 |
| CPU指令 | x86的cmpxchg指令 | 硬件层面保证原子性 | 最底层实现基础 |
原子操作类的乐观锁(CAS)最终就是通过调用CPU的CAS硬件指令实现的,是硬件层面的乐观锁。
3. 原子操作类的核心分类
原子操作类按照操作数据类型和功能扩展可以分为五大类:
3.1 基本类型原子类
核心代表:
- AtomicInteger
- AtomicLong
