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); } }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。