java中的原子操作类

前言

即使一个简单的i++,在多线的环境下也是不安全的,但是加锁之后,效率又显得过于笨重。因此java提供了Atomic包,这个包中的原子类操作提供了一种用法简单,性能高效,线程安全的更新一个变量的方式

原子类型基本更新类

AtomicBoolean:原子更新布尔类型
AtomicInteger:原子更新整型
AtomicLong:原子更新长整型
以上三种就是原子类型基本更新类,至于三个类提供的方法,我就不介绍了,有兴趣可以去看java的api文档。
java中有八种基本数据类型,我们这里只有三个原子类型操作类,那么剩下的几种怎么更新呢。

public final native boolean compareAndSwapLong(Object o, long offset, long expected, long x);
public final native boolean compareAndSwapLong(Object o, long offset, long expected, int x);
public final native boolean compareAndSwapLong(Object o, long offset, long expected, object x);

由上面的代码,大家可以看出,所有原子的底层基本都是这三个方法。所以Boolean和其他类型,都是通过转为整型实现的。

原子更新数组

AtomicReferencenArray:原子更新引用类型数组的元素
AtomicIntegerArray:原子更新整型数组的元素
AtomicLongArray:原子更新长整型数组的元素

原子更新引用类型

AutomicReference:原子更新引用类型
AutomicReferenceFeildUpdater:原子更新引用类型里的字段
AutomicMarkableReference:原子更新带有标记位的引用类型

原子更新字段类

AutomicIntegerFeildUpdater:原子更新引用类型
AutomicLongFeildUpdater:原子更新引用类型里的字段
AutomicStampedReference:原子更新带有标记位的引用类型

这个带版本号的原子更新,就是为了解决著名的ABA问题,除此之外和其他的原子类操作,基本没有任何的区别。

总结

原子类的使用比较少见,但是在多线程的环境下,如果可以利用好这个原子类。这个效率会比使用锁要高很多。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

mark---小鑫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值