常用方法
在高并发情况下,一般会用synchronized等关键字来保证线程安全,但针对 i++ 和 i-- ,我们可以用AtomicInteger来替代
public static void main(String[] args) { AtomicInteger int1=new AtomicInteger(); System.out.println("AtomicInteger的默认值为:"+int1); //对数据赋值 int1.set(123); //获取数据值 System.out.println("获取数据的值为: "+int1.get()); //先相加,再获取值 System.out.println("先与12相加,再获取值: "+int1.addAndGet(12)); //先获取值,再相加 System.out.println("先获取值,再与12相加: "+int1.getAndAdd(12)); //先获取值,再赋新值 System.out.println("先获取值,再赋新值100: "+int1.getAndSet(100)); //自减1,再获取值 System.out.println("自减1,再获取值: "+int1.decrementAndGet()); //自增1,再获取值 System.out.println("自增1,再获取值: "+int1.incrementAndGet()); //先获取值,再自减1 System.out.println("先获取值,再自减1: "+int1.getAndDecrement()); //先获取值,再自增1 System.out.println("先获取值,再自增1: "+int1.getAndIncrement()); }
boolean compareAndSet(int expect,int update)
- 如果atomicInteger变量的值和expect相等,则返回true,并用update重新赋值
- 如果atomicInteger变量的值不等于expect,则返回false,并用update重新赋值
而且由于AtomicInteger由硬件提供原子操作指令实现,在非激烈竞争的情况下,开销更小,速度更快