美文网首页并发编程
Lock底层原理解析-AQS-CAS-02

Lock底层原理解析-AQS-CAS-02

作者: 愤怒的奶牛 | 来源:发表于2020-04-19 23:09 被阅读0次

    上一篇文章我们温习了 AQS 中内部的数据结构,在分析AQS 之前,再来学习一下CAS

    • CAS 案例使用
    /**
     * cas 简单 案例
     */
    public class CASDemo {
    
        // cas 实现 依赖
        // Unsafe.Caused by: java.lang.SecurityException: Unsafe 直接调用会有异常,被认为是不安全的
    //    private static final Unsafe unsafe = Unsafe.getUnsafe();
    
        private static Unsafe unsafe ;
        static {
            try {
                Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe");
                theUnsafe.setAccessible(true);
                unsafe = (Unsafe)theUnsafe.get(null);
            } catch (NoSuchFieldException | IllegalAccessException e) {
                e.printStackTrace();
            }
        }
        private int status;
    
        /**
         * cas
         * @param expect
         * @param update
         */
        public void compareAndSet (int expect, int update) throws NoSuchFieldException {
            // 获取 status 在内存中的地址偏移量,简单理解可以是 内存地址值
            long statusOffset = unsafe.objectFieldOffset(CASDemo.class.getDeclaredField("status"));
            // 操作 对是 CASDemo
            // 操作 属性 是 status (地址偏移量)
            // 当前内存中 如果是 expect , 就将内存中的值 更新 为 update
            unsafe.compareAndSwapInt(this,statusOffset, expect, update);
        }
    
        public static void main(String[] args) throws NoSuchFieldException {
            CASDemo casDemo = new CASDemo();
            casDemo.status = 0;
            casDemo.compareAndSet(0,1);// 当 status 值为 0 的时候,将值更新为1
            System.out.println(casDemo.status);
        }
    }
    
    

    我们简单的学习了 CAS ,接下来就可以进入分析 AQS 的内容了。当然CAS 的一些 问题和 实现原理后面再来分析。

    相关文章

      网友评论

        本文标题:Lock底层原理解析-AQS-CAS-02

        本文链接:https://www.haomeiwen.com/subject/qkvwbhtx.html