atomicinteger通过cas机制实现无锁线程安全,必须调用原子方法(如incrementandget、compareandset)而非直接赋值或普通运算符;get()获取最新值,所有操作均原子。

AtomicInteger 通过底层的 CAS(Compare-And-Swap)机制实现线程安全的整数修改,不加锁也能保证并发安全。它不能直接用 = 赋值,必须调用其提供的原子方法。
常用修改方式(带返回值或无返回值)
所有修改操作都是原子的,适用于高并发计数、状态标记等场景:
-
set(int newValue):直接设置新值,无返回值(类似
i = x) - getAndSet(int newValue):先返回当前值,再设为新值(类似“取旧值,换新值”)
- incrementAndGet():自增 1 后返回新值(++i)
- getAndIncrement():先返回当前值,再自增 1(i++)
- addAndGet(int delta):加指定值后返回新结果(i += delta)
- getAndAdd(int delta):先返回当前值,再加 delta
用 compareAndSet 做条件更新
这是最底层也最灵活的操作:仅当当前值等于预期值时,才更新为新值,返回是否成功。
例如实现“仅当值为 0 时设为 1”:
boolean updated = flag.compareAndSet(0, 1); // 成功则返回 true,否则 false
注意不能直接赋值或用普通运算符
下面写法是错误的,会丢失原子性:
atomicInt.get() + 1; // 只是计算,没写回atomicInt.set(atomicInt.get() + 1); // 非原子:读-算-写三步可能被其他线程打断
必须用 incrementAndGet() 或 addAndGet(1) 等原子方法替代。
获取当前值用 get()
不是属性访问,而是方法调用:int current = atomicInt.get();
它保证获取的是最新写入的值(基于 volatile 语义),但不加锁也不阻塞。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











