zoukankan      html  css  js  c++  java
  • 多线程并发安全计数器实现限流(四)CAS

    cas 计数器

    public class CounterCAS implements Counter {
    
        volatile int i = 0; // 本质是修改内存中某一个变量的值
    
        static Unsafe unsafe;
    
        private static long valueOffSet;
    
        static {
            try {
                // 反射获取属性
                Field field = Unsafe.class.getDeclaredField("theUnsafe");
                field.setAccessible(true);
                unsafe = (Unsafe) field.get(null);
    
                Field fieldi = CounterCAS.class.getDeclaredField("i");
                valueOffSet = unsafe.objectFieldOffset(fieldi);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public int incr() {
            for (; ; ) {
                int current = i;
                int update = current + 1;
                if(unsafe.compareAndSwapInt(this,valueOffSet, current, update)){
                    return update;// CAS 直接操作到内存层面
                }
    
            }
        }
    
        public int decr() {
            for (; ; ) {
                // 1. 获取i的值
                int current = i;
                // 2. 进行计算
                int update = current - 1;
                // CAS 近似硬件层面的操作(JDK和JVM 做的封装)
                if (unsafe.compareAndSwapInt(this, valueOffSet, current, update)) {
                    return update;
                }
            }
        }
    
        @Override
        public int get() {
            return i;
        }
    }
    

      

  • 相关阅读:
    Data Security---->Control Access to the Organization
    Data Modeling
    Slaesforce Paltform Development Basic
    Customize your Chatter Experience.
    wamp自定义网站根目录及多站点配置
    1053-1055
    1046-1052
    1044-1045
    HDOJ 1038-1043
    HDOJ 1031-1037
  • 原文地址:https://www.cnblogs.com/Jomini/p/13623366.html
Copyright © 2011-2022 走看看