首页 > 编程语言 > 详细

[多线程] JUC原子类

时间:2020-10-02 22:55:24      阅读:40      评论:0      收藏:0      [点我收藏+]

技术分享图片


介绍

原子类也是java实现同步的一套解决方案, 在我们这里 atomic 是指一个操作是不可中断的。即使是在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程干扰,所以,所谓原子类说简单点就是具有原子操作特征的类,原子操作类提供了一些修改数据的方法,这些方法都是原子操作的,在多线程情况下可以确保被修改数据的正确性。

实现原理

主要依赖CAS(Compare and Swap),即比较交换来实现。ABA问题通过增加版本号的方式来解决,类乐观锁。
CAS的思想很简单:三个参数,一个当前内存值V、旧的预期值A、即将更新的值B,当且仅当预期值A和内存值V相同时,将内存值修改为B并返回true,否则什么都不做,并返false。在JAVA中,CAS通过调用C++库实现,由C++库再去调用CPU指令集。在大多数处理器上 CAS 都是个非常轻量级的操作,这也是其优势所在。
技术分享图片

具体类型

基本类型

使用原子的方式更新基本类型

AtomicInteger:整形原子类
AtomicLong:长整型原子类
AtomicBoolean :布尔型原子类

数组类型

使用原子的方式更新数组里的某个元素

AtomicIntegerArray:整形数组原子类
AtomicLongArray:长整形数组原子类
AtomicReferenceArray :引用类型数组原子类

引用类型

AtomicReference:引用类型原子类
AtomicStampedRerence:原子更新引用类型里的字段原子类
AtomicMarkableReference :原子更新带有标记位的引用类型

对象的属性修改类型

AtomicIntegerFieldUpdater:原子更新整形字段的更新器
AtomicLongFieldUpdater:原子更新长整形字段的更新器
AtomicStampedReference :原子更新带有版本号的引用类型。该类将整数值与引用关联起来,可用于解决原子的更新数据和数据的版本号,可以解决使用 CAS 进行原子更新时可能出现的 ABA 问题。

[多线程] JUC原子类

原文:https://www.cnblogs.com/gustavo/p/5d781bf5102c54bcfcbf83a5830e8d65.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!