AtomicInteger,一个提供原子操作的Integer的类。在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字。而AtomicInteger则通过一种线程安全的加减操作接口。
API的常用方法
import java.util.concurrent.atomic.AtomicInteger; /** * 来看AtomicInteger提供的接口。 //获取当前的值 public final int get() //取当前的值,并设置新的值 public final int getAndSet(int newValue) //获取当前的值,并自增 public final int getAndIncrement() //获取当前的值,并自减 public final int getAndDecrement() //获取当前的值,并加上预期的值 public final int getAndAdd(int delta)
测试类:
package com.zslin.list.demo; import java.util.concurrent.atomic.AtomicInteger; /** * * @author WQ<br> * @version 创建时间:2017年6月18日 下午3:38:59<br> */ public class AtomicIntegerDemo { public static void main(String[] args) { AtomicInteger ai = new AtomicInteger(0); int i1 = ai.get(); v(i1); int i2 = ai.getAndSet(5); v(i2); int i3 = ai.get(); v(i3); int i4 = ai.getAndIncrement(); v(i4); v(ai.get()); } static void v(int i) { System.out.println("i : " + i); } }
运行结果:
i : 0 i : 0 i : 5 i : 5 i : 6
结合上面的示例,可以得到如下结果:
首先看两段代码,一段是Integer的,一段是AtomicInteger的,为以下: public class Sample1 { private static Integer count = 0; synchronized public static void increment() { count++; } } 以下是AtomicInteger的: public class Sample2 { private static AtomicInteger count = new AtomicInteger(0); public static void increment() { count.getAndIncrement(); } }
上面效果是一样的。
AtomicInteger使用总结
AtomicInteger是在使用非阻塞算法实现并发控制,在一些高并发程序中非常适合,但并不能每一种场景都适合,不同场景要使用使用不同的数值类。