首页 > 其他 > 详细

AtomicReference 源码分析

时间:2021-07-15 23:50:16      阅读:15      评论:0      收藏:0      [点我收藏+]

JUC 并发包 中也提供了三个原子应用类型的操作类:

  • AtomicReference
  • AtomicMarkableReference
  • AtomicStampedReference

有时候原子操作不一定是基本数据类型,而是 BigDecimal 类型,所以需要用到这些类。

AtomicReference 在声明的时候需要指定一个泛型 AtomicReference<BigDecimal>,和 AtomicInteger 是方式不一样,底层调用的是 Unsafe#compareAndSwapObject 方法。

下面是一个使用例子:

// DecimalAccount 是一个自定义接口,只有 getBalance 和 withdraw 抽象方法。
class DecimalAccountSafeCas implements DecimalAccount {
    AtomicReference<BigDecimal> ref;

    public DecimalAccountSafeCas(BigDecimal balance) {
        ref = new AtomicReference<>(balance);
    }

    @Override
    public BigDecimal getBalance() {
        return ref.get();
    }
    
    @Override
    public void withdraw(BigDecimal amount) {
        while (true) {
            BigDecimal prev = ref.get();
            BigDecimal next = prev.subtract(amount);
            if (ref.compareAndSet(prev, next)) {
                break;
            }
        }
    }
}

AtomicReference 就是修改引用所指向的对象实例。

AtomicReference 源码分析

原文:https://www.cnblogs.com/daihao-g/p/15017467.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!