ConcurrentProgramming:Atomic 原子类
ConcurrentProgramming:Atomic 原子类
关键词
- 方法基于CAS实现+自旋
- AtomicInteger -> Unsafe的对象 -> CAS实现+自旋
一、Atomic介绍
Atomic 翻译成中⽂是原⼦的意思。在化学上,我们知道原⼦是构成⼀般物质的最⼩单位,在化学反应中是不可分割的。在我们这⾥ Atomic 是指⼀个操作是不可中断的。即使是在多个线程⼀起执⾏的时候,⼀个操作⼀旦开始,就不会被其他线程⼲扰。
所以,所谓原⼦类说简单点就是具有原⼦/原⼦操作特征的类。
并发包 java.util.concurrent 的原⼦类都存放在 java.util.concurrent.atomic 下,如下图所示。
案例:
public class MyClass {private int count = 0;public void synchronized increment() {count++;}public void synchronized decrement() {count--;}
}
对于一个整数的加减操作,要保证线程安全,需要加锁,也就是加synchronized关键字。
有了Concurrent包的Atomic相关的类之后,synchronized关键字可以用AtomicInteger代替,其性能更好,对应的代码变为:
public class MyClass {private AtomicInteger count = new AtomicInteger(0);public void add() {count.getAndIncrement();}public long minus() {count.getAndDecrement();}
}
源码:
上图中的U是Unsafe的对象:
AtomicInteger的getAndIncrement() 方法和getAndDecrement() 方法都调用了一个方法:U.getAndAddInt(…) 方法,该方法基于CAS实现:
do-while循环直到判断条件返回true为止。该操作称为自旋。
getAndAddInt 方法具有volatile的语义,也就是对所有线程都是同时可见的。
而weakCompareAndSetInt 方法的实现:
调用了compareAndSetInt 方法,该方法的实现:
上图中的方法中,
- 第一个参数表示要修改哪个对象的属性值;
- 第二个参数是该对象属性在内存的偏移量;
- 第三个参数表示期望值;
- 第四个参数表示要设置为的目标值。
二、分类
基本类型
使⽤原⼦的⽅式更新基本类型
- AtomicInteger :整形原⼦类
- AtomicLong :⻓整型原⼦类
- AtomicBoolean :布尔型原⼦类
数组类型
使⽤原⼦的⽅式更新数组⾥的某个元素
- AtomicIntegerArray :整形数组原⼦类
- AtomicLongArray :⻓整形数组原⼦类
- AtomicReferenceArray :引⽤类型数组原⼦类
引⽤类型
- AtomicReference :引⽤类型原⼦类
- AtomicStampedReference :原⼦更新带有版本号的引⽤类型。该类将整数值与引⽤关联起来,可⽤于解决原⼦的更新数据和数据的版本号,可以解决使⽤ CAS 进⾏原⼦更新时可能出现的 ABA 问题。
- AtomicMarkableReference :原⼦更新带有标记位的引⽤类型
对象的属性修改类型
- AtomicIntegerFieldUpdater :原⼦更新整形字段的更新器
- AtomicLongFieldUpdater :原⼦更新⻓整形字段的更新器
- AtomicReferenceFieldUpdater :原⼦更新引⽤类型字段的更新器
ConcurrentProgramming:Atomic 原子类相关推荐
- atomic原子类实现机制_JUC学习笔记--Atomic原子类
Atomic 原子操作类包 Atomic包 主要是在多线程环境下,无锁的进行原子操作.核心操作是基于UnSafe类实现的CAS方法 CAS CAS: compareAndSwap :传入两个值:期望值 ...
- Atomic原子类常用方法总结(包含四大类型)
基本介绍: Atomic指一个操作不可中断,即使在多线程情况下,一个操作一旦开始,就不会被其他线程干扰.如果多线程中仅需要Atomic原子类解决的事情,就不需要synchronized重量级锁了. 原 ...
- JUC多线程:Atomic原子类与CAS原理
一.Atomic 原子类的原理: Atomic 原子操作类是基于无锁 CAS + volatile 实现的,并且类中的所有方法都使用 final 修饰,进一步保证线程安全.而 CAS 算法的具体实现方 ...
- atomic原子类实现机制_深入了解Java atomic原子类的使用方法和原理
在讲atomic原子类之前先看一个小例子: public class UseAtomic { public static void main(String[] args) { AtomicIntege ...
- atomic原子类实现机制_并发编程:并发操作原子类Atomic以及CAS的ABA问题
本文基于JDK1.8 Atomic原子类 原子类是具有原子操作特征的类. 原子类存在于java.util.concurrent.atmic包下. 根据操作的数据类型,原子类可以分为以下几类. 基本类型 ...
- (转)Java atomic原子类的使用方法和原理(一)
在讲atomic原子类之前先看一个小例子: public class UseAtomic { public static void main(String[] args) { AtomicIntege ...
- Atomic原子类和Unsafe魔法类 详解
文章目录 1. Atomic原子类 1.1 Atomic原子类的作用 1.2 原子更新基本类型类 1.3 原子更新数组类 1.4 原子更新引用类型 1.5 原子更新字段类 2. Unsafe魔法类 2 ...
- Atomic原子类及原理
目录 1 前言 2 unsafe类对Atomic原子类的支持 3 AtomicInteger的内部实现 3.1 准备 3.2 读 3.3 写 4 CAS机制 4.1 基本操作数 4.2 例子 4.3 ...
- Atomic 原子类
1 Atomic 原子类介绍 Atomic 翻译成中文是原子的意思.在化学上,我们知道原子是构成一般物质的最小单位,在化学反应中是不可分割的.在我们这里 Atomic 是指一个操作是不可中断的.即使是 ...
最新文章
- 『中级篇』docker容器安装wordpress(37)
- 出一个简单的Spring框架入门教程
- 邮宝打印面单尺寸调整_如何打印身份证的实际尺寸?怎样用照片打印身份证复印件...
- github编程语言排名_这是每种主要编程语言的Hello World应用示例-全部在一个GitHub存储库中
- WIN7中文专业版安装英文语言包的方法
- 智能门锁电路图_智能门锁工作原理分析及智能门锁基本工作流程技术原理介绍...
- win10下虚拟机VMware极简安装PhoenixOS
- 计算机导论知识点总结(下)
- SQL Story(十)————游标的应该与不应该 (转)
- 用药安全,从娃娃抓起
- 怎样查找计算机死机日志,死机和日志错误
- 七段数码管显示原理研究
- 亚马逊显示在售商品为0怎么办?亚马逊新品货还没到就在售了
- 【2020年高被引学者】 田奇 华为
- Pycharm的python interpreter选择
- 嵌入式100题(81):波特率是什么,为什么双方波特率要相同,高低波特率有什么区别;...
- SpringBoot常见的经典面试题
- c++实现贪心法构造最大整数问题
- 金融粉去哪里引流?哪个平台做金融引流好?贴吧精准引流金融粉技巧
- MATLAB读写.wav和.raw音频文件