AtomicInteger简介


这个类真的非常实用,更重要的是 它确实非常简单:

附上自己的代码,可以自己试试:

AtomicInteger,一个提供原子操作的Integer的类。在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字。而AtomicInteger则通过一种线程安全的加减操作接口。

 

代码:

package test;

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)


 * @author YangBaoBao
 *
 */
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);
 }
}


//真实使用情况

private final static int MAXNUM = 9999;
    private static AtomicInteger num = new AtomicInteger(0);

    /**
     * 获取文件名,文件名由日期时间(精确到秒)+序列组成,序列有最大值,当达到最大值时,恢复初始值.
     *
     * @return 文件名
     */
    public static String getNewFileName() {
        StringBuffer sb = new StringBuffer();
        Calendar calendar = Calendar.getInstance();
        sb.append(calendar.get(Calendar.YEAR));
        sb.append(calendar.get(Calendar.MONTH) + 1);
        sb.append(calendar.get(Calendar.DAY_OF_MONTH));
        sb.append(calendar.get(Calendar.HOUR_OF_DAY));
        sb.append(calendar.get(Calendar.MINUTE));
        sb.append(calendar.get(Calendar.SECOND));
        sb.append(num.addAndGet(1));
        if (num.get() > MAXNUM) {
            num.set(0);
        }

        return sb.toString();
    }

你可能感兴趣的:(AtomicInteger简介)