【JDK 5】JUC Atomic 原子类

一、作用

保证对数据操作是原子性的


二、原理

Unsafe类实现CAS


三、原子类列表

原子类原子类数组原子类属性更新器
布尔值AtomicBoolean
整型AtomicIntegerAtomicIntegerArrayAtomicIntegerFieldUpdater
LongAtomicLongAtomicLongArrayAtomicLongFieldUpdater
引用AtomicReferenceAtomicReferenceArrayAtomicReferenceFieldUpdater
引用,带标记AtomicMarkableReference
引用,带计数AtomicStampedReference

四、常用API

设置set
获取get
先获取,再加 ngetAndAdd
加 n,再获取addAndGet
先获取,再减 1getAndDecrement
减 1,再获取decrementAndGet
先获取,再加1getAndIncrement
加 1,再获取incrementAndGet
比较再设置,返回booleancompareAndSet(旧值, 新值)
比较再设置,返回旧值compareAndExchange(旧值, 新值)
等等…

五、原子类属性更新器

AtomicXXFieldUpdater

作用:

将实例的普通属性 进行 原子操作

条件:

实例属性类型必须是volatile,并且可以直接访问该属性

属性更新器实例属性类型创建方法
AtomicIntegerFieldUpdater必须是volatile intnewUpdater(实例类.class, “字段名”)
AtomicLongFieldUpdater必须是volatile longnewUpdater(实例类.class, “字段名”)
AtomicReferenceFieldUpdater必须是volatile TnewUpdater(实例类.class, 字段类.class,“字段名”)

使用:

public class User{
    volatile int id;
    volatile String name;

    public User(int id, String name) {
        this.id = id;
        this.name = name;
    }
}

例子一、AtomicIntegerFieldUpdater

User user = new User( 10010, "码鹿" );
AtomicIntegerFieldUpdater<User> idUpdater = AtomicIntegerFieldUpdater.newUpdater(User.class, "id");
idUpdater.compareAndSet(user, 10010, 10086);

例子二、AtomicReferenceFieldUpdater

User user = new User( 10010, "码鹿" );
AtomicReferenceFieldUpdater<User, String> nameUpdater = AtomicReferenceFieldUpdater.newUpdater(User.class, String.class, "name");
nameUpdater.compareAndSet(user, "码鹿", "码鹿鸭");

缺点

Atomic类在高并发情况下,
同一时间只有一个线程CAS成功其他线程循环重试
所以并发量 性能


更新

JDK8 引入 累加器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码鹿的笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值