JUC中的原子类总结
Atomic原子类介绍:
Atomic 是指一个操作是不可中断的。即使是在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程干扰。
分类:
根据操作的数据类型,可以分为4类:
基本数据类型:
- AtomicInteger:整型原子类
- AtomicLong:长整型原子类
- AtomicBoolean :布尔型原子类
数组类型
使用原子的方式更新数组里的某个元素
- AtomicIntegerArray:整型数组原子类
- AtomicLongArray:长整型数组原子类
- AtomicReferenceArray :引用类型数组原子类
引用类型
- AtomicReference:引用类型原子类
- AtomicStampedRerence:原子更新引用类型里的字段原子类
- AtomicMarkableReference :原子更新带有标记位的引用类型
对象的属性修改类型
- AtomicIntegerFieldUpdater:原子更新整型字段的更新器
- AtomicLongFieldUpdater:原子更新长整型字段的更新器
- AtomicStampedReference :原子更新带有版本号的引用类型。该类将整数值与引用关联起来,可用于解决原子的更新数据和数据的版本号,可以解决使用 CAS 进行原子更新时可能出现的 ABA 问题
通过一个简单例子带大家看一下基本数据类型原子类的优势
①多线程环境不使用原子类保证线程安全(基本数据类型)
class Test {private volatile int count = 0;//若要线程安全执行执行count++,需要加锁public synchronized void increment() {count++; }public int getCount() {return count;}
}
②多线程环境使用原子类保证线程安全(基本数据类型)
class Test2 {private AtomicInteger count = new AtomicInteger();public void increment() {count.incrementAndGet();}//使用AtomicInteger之后,不需要加锁,也可以实现线程安全。public int getCount() {return count.get();}
}
AtomicInteger 类主要利用 CAS (compare and swap) + volatile 和 native 方法来保证原子操作,从而避免 synchronized 的高开销,执行效率大为提升。
JUC中的原子类总结相关推荐
- 6.juc包下的原子类AtomicInteger,AtomicLong等AtomicXXX介绍
在介绍juc中的原子类之前,先看看官方文档对java.util.concurrent.atomic包的介绍官方文档地址这里截取翻译之后的部分描述 1. 支持对单个变量进行无锁线程安全编程 2. 类的 ...
- atomic原子类实现机制_JUC学习笔记--Atomic原子类
Atomic 原子操作类包 Atomic包 主要是在多线程环境下,无锁的进行原子操作.核心操作是基于UnSafe类实现的CAS方法 CAS CAS: compareAndSwap :传入两个值:期望值 ...
- 并发笔记(八)JUC原子类以及线程池(Executors)
一.原子类 JUC中提供了针对一个变量的修改的简单原子操作,提供了原子类,相对于我们自己采用锁的方式实现来说,原子类的性能更好. 1.1原子类的底层实现原理理论:volatile+(循环的CAS) C ...
- Atomic 原子类
1 Atomic 原子类介绍 Atomic 翻译成中文是原子的意思.在化学上,我们知道原子是构成一般物质的最小单位,在化学反应中是不可分割的.在我们这里 Atomic 是指一个操作是不可中断的.即使是 ...
- Java多线程进阶面试-Atomic 原子类
1.介绍一下 Atomic 原子类 Atomic 翻译成中文是原子的意思.在化学上,我们知道原子是构成一般物质的最小单位,在化学反应中是不可分割的.在我们这里 Atomic 是指一个操作是不可中断的. ...
- Atomic 原子类总结
Atomic 原子类总结 Atomic 原子类介绍 基本类型原子类 基本类型原子类介绍 AtomicInteger 常见方法使用 基本数据类型原子类的优势 AtomicInteger 线程安全原理简单 ...
- 多线程-使用大全 基础使用 / 锁 / 线程池 / 原子类 / 并发包 / CAS / AQS (2022版)
一.多线程描述 1.什么是cpu CPU的中文名称是中央处理器,是进行逻辑运算用的主要由运算器.控制器.寄存器三部分组成, 运算器:从字面意思看就是运算就是起着运算的作用, 控制器:就是负责发出cpu ...
- 【Java_多线程并发编程】JUC原子类——4种原子类
根据修改的数据类型,可以将JUC包中的原子操作类可以分为4种,分别是: 1. 基本类型: AtomicInteger, AtomicLong, AtomicBoolean ; 2. 数组类型: Ato ...
- Java多线程系列--“JUC原子类”01之 框架
2019独角兽企业重金招聘Python工程师标准>>> Java多线程系列--"JUC原子类"01之 框架 根据修改的数据类型,可以将JUC包中的原子操作类可以分 ...
- Java多线程系列--“JUC原子类”03之 AtomicLongArray原子类
概要 AtomicIntegerArray, AtomicLongArray, AtomicReferenceArray这3个数组类型的原子类的原理和用法相似.本章以AtomicLongArray对数 ...
最新文章
- Nature:拟南芥微生物组功能研究2细菌基因组测序和分析
- 解决外部符号错误:_main,_WinMain@16,__beginthreadex
- 向app store提交应用时,必须点“ready to upload binary”!
- NetBeans Weekly News - Issue # 446 - Jul 20, 2010
- 【POJ - 3352】Road Construction(Tarjan,边双连通分量)
- vue如何配置服务器端跨域_vue项目里如何配置本地代理实现跨域请求
- c++字符串string操作全解
- OpenGL学习(八)phong光照模型
- “知识资源细颗粒度建设和标签标引”规则规范心得说明
- 【千峰网安学习】利用PE破解系统密码
- 小谈 《日内交易策略--谷物期货交易实战指南》中提到的策略
- luffy-16/订单表设计,立即付款接口/前端,支付成功get回调用户展示,支付成功post回调修改订单状态
- Magento2.1x常见报错处理
- 多元统计分析及R语言建模
- 保证项目如期上线,测试人能做些什么?
- 祛百病祖传秘法转抄的
- unordered_map详细介绍
- 【Python网络爬虫】爬虫常见加密解密算法
- Outlook2013/2016签名选项卡无法打开
- 大数据算法在诸多领域“弄潮”