AtomicInteger类的简单应用

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是在使用非阻塞算法实现并发控制,在一些高并发程序中非常适合,但并不能每一种场景都适合,不同场景要使用使用不同的数值类。

 

posted @ 2017-06-18 15:46  Mr_伍先生  阅读(732)  评论(0编辑  收藏  举报