原子操作: 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

 

更多线程安全链接:

posted @ 2017-12-27 15:29  晕菜一员  阅读(1316)  评论(0)    收藏  举报