码迷,mamicode.com
首页 > 其他好文 > 详细

AtomicInteger类的理解与使用

时间:2018-03-02 15:36:04      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:exce   sample   eof   extend   new   多个   highlight   except   xtend   

对比Integer和AtomicInteger

Integer:

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();
    }

}

以上两段代码,在使用Integer的时候,必须加上synchronized保证不会出现并发线程同时访问的情况,而在AtomicInteger中却不用加上synchronized,在这里AtomicInteger是提供原子操作的

AtomicInteger

AtomiciInteger提供一个原子操作的Integer类,线程安全的方式进行加减

场景:适用于高并发

源码:

ublic class AtomicInteger extends Number implements java.io.Serializable {
    private static final long serialVersionUID = 6214790243416807050L;

    // setup to use Unsafe.compareAndSwapInt for updates
    private static final Unsafe unsafe = Unsafe.getUnsafe();
    private static final long valueOffset;

    static {
        try {
            valueOffset = unsafe.objectFieldOffset
                (AtomicInteger.class.getDeclaredField("value"));
        } catch (Exception ex) { throw new Error(ex); }
    }

    private volatile int value;

  volatile防止VM进行指令重排,使得多个线程可以共享变量,但是时VM降低了优化。

常用接口:

/**
 * 来看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) 

 

AtomicInteger类的理解与使用

标签:exce   sample   eof   extend   new   多个   highlight   except   xtend   

原文地址:https://www.cnblogs.com/L-a-u-r-a/p/8493407.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!