原子操作: atomic
atomic 是不会阻塞线程(或者说只是在硬件级别上阻塞了),线程安全的加强版的volatile原子操作。
package路径:java.util.concurrent.atomic下,多了一批原子处理类,主要用于在高并发环境下的高效程序处理。
处理类主要有:
- 基本类:AtomicInteger 、AtomicLong 、AtomicBoolean
- 引用类型:AtomicReference 、 AtomicReference的ABA实例 、 AtomicStampedRerence 、 AtomicMarkableReference
- 数组类型:AtomicIntegerArray 、 AtomicLongArray 、 AtomicReferenceArray
- 属性原子修改器(Updater): AtomicIntegerFieldUpdater 、 AtomicLongFieldUpdater 、 AtomicReferenceFieldUpdater
原子操作atomic的实现原理:是利用CPU的比较并交换(即CAS: Compare and Swap)和 非阻塞算法(nonblocking algorithms)。
AtomicInteger这个类,特别适用于高并发访问。
如果查看AtomicInteger的源码的话,会发现有些是通过调用JNI的代码来实现的。而compareAndSwapInt就是借助C来调用CPU底层指令实现的。
AtomicInteger的主要方法有:
1 // 获取当前的值 2 public final int get() 3 4 // 获取当前的值,并设置新的值 5 public final int getAndSet(int newValue) 6 7 // 获取当前的值,并自增 8 public final int getAndIncrement() 9 10 // 获取当前的值,并自减 11 public final int getAndDecrement() 12 13 // 获取当前的值,并加上预期的值 14 public final int getAndAdd(int delta)
使用方法:
1 public static void main(String[] args) { 2 3 AtomicInteger ai = new AtomicInteger(0); 4 5 System.out.println(ai.get()); 6 System.out.println(ai.getAndSet(5)); 7 System.out.println(ai.getAndIncrement()); 8 System.out.println(ai.getAndDecrement()); 9 System.out.println(ai.getAndAdd(10)); 10 System.out.println(ai.get()); 11 }
输出结果:
1 0 2 0 3 5 4 6 5 5 6 15
更多线程安全链接:

浙公网安备 33010602011771号