JAVA基础:AtomicInteger
目录
前言
AtomicInteger的常用方法
AtomicInteger的底层
ABA问题
前言
在多线程的环境下,一旦涉及到多个线程共享变量的加加减减操作,就会出现线程安全问题。这时候可以使用AtomicInteger 类型的变量进行加加减减
AtomicInteger的常用方法
static AtomicInteger count = new AtomicInteger(0);
count.get(); //获得变量值(不是同步的)
count.set(value);//给变量赋值(不是同步的)
count.getAndIncrement(); //等价于count++
count.incrementAndGet(); //等价于++count
count.getAndDecrement(); //等价于count--
count.decrementAndGet(); //等价于--count
count.getAndAdd(v); //等价于count += v
AtomicInteger的底层
AtomicInteger底层使用了CAS算法,所以不会出现同步问题
ABA问题
在比较时原始值与当前变量中的值相等,也不能说明这个值没有被修改过
因为有可能另一个线程将变量中的值,从A改成了B又改回成了A,这就出现了ABA问题
\ABA问题如何解决呢? 可以为数据增加一个版本号,只要改变过,版本号就+1