当前位置:   article > 正文

AtomicInteger实现_自己实现一个atomicinteger

自己实现一个atomicinteger

无锁操作常见场景

atomic包内的类经常使用无锁操作

AtomicInteger是非常典型的一种

   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); }
    }

    private volatile int value;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

无锁增加操作实现 JDK1.7

public final int getAndDecrement() {  
    for (;;) {  
        int current = get();  
        int next = current - 1;  
        if (compareAndSet(current, next))  
            return current;  
    }  
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

JDK1.8

public final int getAndAddInt(Object o, long offset, int delta) {
    int v;
    do {
        v = getIntVolatile(o, offset);
    } while (!compareAndSwapInt(o, offset, v, v + delta));
    return v;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/311314
推荐阅读
相关标签
  

闽ICP备14008679号