AtomicInteger原理简介说明
下文笔者讲述AtomicInteger原理简介说明,如下所示
AtomicInteger原理
AtomicInteger使用CAS、volatile和本地方法来保证原子操作
AtomicInteger借助两个重要的参数
一个是 Volatile 修饰的 value,为待更新的新值
一个是本地旧值的 valueOffSet
它使用本地方法拿到旧值的内存地址
然后通过 CAS 操作将期望值和旧值进行对比
当返回值相同就更新为新值
由于新值value采用volatile修饰,volatile具有可见性,
所以可以保证总能拿到该变量的最新值
AtomicReference
AtomicReference可以保证修改对象引用时的线程安全性 也是基于CAS操作 所以也存在ABA问题 解决办法是使用带有时间戳的对象引用 AtomicStampedReference
AtomicInteger示例
import java.util.concurrent.atomic.AtomicInteger;
/**
* AtomicInteger 使用案例
* 用它来替换不安全的 int
* 默认初始值为0
* getAndIncrement 方法只能以 +1 的方式来累加
*/
public class test {
private static AtomicInteger count = new AtomicInteger();
public static class testThread implements Runnable {
@Override
public void run() {
for (int i = 0; i < 10000; i++) {
count.getAndIncrement();
}
}
}
public static void main(String[] args) throws InterruptedException {
testThread t = new testThread();
Thread thread1 = new Thread(t);
Thread thread2 = new Thread(t);
thread1.start();
thread2.start();
Thread.sleep(1000);
System.out.println(count);
}
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


