ITPub博客

首页 > 应用开发 > > Java中的13个原子操作类

Java中的13个原子操作类

作者:lgchen 时间:2019-11-20 16:21:07 0 删除 编辑

作者:一剪梅

来源:https://www.iteye.com/blog/xiaoheng-2509522

atomic 包中的 13 个类,属于 4 中类型的原子更新方式.

原子更新基本类型

原子更新数组

原子更新引用

原子更新属性

atomic 包里的类基本都是使用 Unsafe 实现的包装类.

1.原子更新基本类型

AtomicBoolean

AtomicInteger

AtomicLong

本类以 AtomicInteger 进行讲解:

int addAndGet(int delta) 以原子方式将输入的数值与实例中的值相加,并返回结果

boolean compareAndSet(int expect, int update) 如果输入的数值等于预期值,则以原子的方式将该值设置为输入的值.

int getAndIncrement() 以原子方式将当前值加 1,注意,这里返回的是自增前的值.

void lazySet(int newValue) 最终会设置成 newValue,使用 lazySet 设置值后,可能导致其他线程在之后的一小段时间内还是可以读到 旧值.

int getAndSet(int newValue) 以原子方式设置为 newValue 的值,并返回旧值.

getAndIncrement 是如何实现原子操作的了?

我们可以看到,它的实现原理是死循环 + CAS.

2.原子更新数组

AtomicIntegerArray 原子更新整形数组里的元素

AtomicLongArray 原子更新长整形数组里的元素

AtomicReferenceArray 原子更新引用类型数组里的元素

AtomicIntegerArray 类提供方法如下:(1) int addAndGet(int i, int delta) 以原子方式将输入值与数组中的索引 i 的元素相加 (2) boolean compareAndSet(int i, int expect, int update) 如果当前值等于预期值,则以原子方式将数组位置 i 的元素设置成 update 值.

3.原子更新引用类型

原子更新基本类型的 AtomicInteger, 只能更新一个变量,如果要原子更新多个变量,就需要使用这个原子更新引用类型提供的类.

AtomicReference 原子更新引用类型

AtomicReferenceFieldUpdate 原子更新引用类型里的字段

AtomicMarkableReference 原子更新带有标记位的引用类型.

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/1276/viewspace-3161121/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-04-15

  • 博文量
    115
  • 访问量
    1025