AtomicInteger用于异步统计的原子类
在异步操作中进行自增长统计理论上是可以用全局变量int类型统计的,但线程数多了,数据就会出错,因为count++不是原子性的。而且全局变量存储在全局数据区中,全局变量的生命期和主程序一样,随程序的销毁而销毁,占用空间多。
使用AtomicInteger就能保证数据的原子性,特别是在高度并发竞争情形下,AtomicInteger非常适用。
public class AutomicIntegerTest implements Runnable {
static AtomicInteger atomicInteger = new AtomicInteger(0);
static int commonInteger = 0;
public void addAtomicInteger() {
atomicInteger.getAndIncrement();
}
public void addCommonInteger() {
commonInteger++;
}
@Override
public void run() {
//可以调大10000看效果更明显
for (int i = 0; i < 100000; i++) {
addAtomicInteger();
addCommonInteger();
}
}
public static void main(String[] args) throws InterruptedException {
AutomicIntegerTest atomicIntegerTest = new AutomicIntegerTest();
Thread thread1 = new Thread(atomicIntegerTest);
Thread thread2 = new Thread(atomicIntegerTest);
thread1.start();
thread2.start();
//join()方法是为了让main主线程等待thread1、thread2两个子线程执行完毕
thread1.join();
thread2.join();
System.out.println("AtomicInteger add result = " + atomicInteger.get());
System.out.println("CommonInteger add result = " + commonInteger);
}
}
循环1w次以上差异明显