随笔 - 295  文章 - 0  评论 - 16  阅读 - 41万 
复制代码
public class AtomicInteger extends Number implements java.io.Serializable {
    // setup to use Unsafe.compareAndSwapInt for updates
    private static final Unsafe unsafe = Unsafe.getUnsafe();
    private static final long valueOffset;
    
    static {
      try {
        valueOffset = unsafe.objectFieldOffset
            (AtomicInteger.class.getDeclaredField("value"));
      } catch (Exception ex) { throw new Error(ex); }
    }
    
    //使用volatile修饰,保证每次都是从主存中读取
    private volatile int value;
    
    public final int get() {
        return value;
    }
    public final void set(int newValue) {
        value = newValue;
    }
    
    //get旧值,set新值。 
    //CAS操作本来是不阻塞的,但是这里是死循环,只有当CAS返回true时,才会出循环。
    public final int getAndSet(int newValue) {
        for (;;) {
            //每次循环,都是重新get值
            int current = get();
            if (compareAndSet(current, newValue))
                return current;
        }
    }
    
    //CAS本人,都说它是原子操作,在汇编里是一条指令。
    //首先拿到旧值,如果旧值和内存相等,并修改成功,则返回true。
    public final boolean compareAndSet(int expect, int update) {
        return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
    }
}
复制代码

 

posted on   偶尔发呆  阅读(175)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥
点击右上角即可分享
微信分享提示