Java面试八股之Java中有哪些原子类,原理是什么

news2024/12/28 19:47:23
  1. Java中有哪些原子类,原理是什么

AtomicInteger 和 AtomicLong:

用于对整数(int)和长整数(long)进行原子操作。

原理:它们内部封装了一个整型或长整型变量,并通过使用Unsafe类提供的CAS(Compare-and-Swap)操作来实现原子更新。CAS是一种无锁的同步机制,它在更新值时会检查预期值是否与当前值相等,如果相等则更新为新值,否则不进行任何改变。这种操作是原子的,即不会被其他线程中断,确保了多线程环境下更新的原子性和可见性。同时,这些类还使用了volatile关键字来确保变量的内存可见性,即当一个线程修改了该变量的值时,其他线程能够立即看到最新值。

AtomicBoolean:

用于对布尔值进行原子操作。

原理:类似于AtomicInteger和AtomicLong,AtomicBoolean内部封装了一个布尔值,并同样使用CAS操作来实现原子的set、getAndSet、compareAndSet等操作。volatile关键字同样用于确保布尔值的可见性。

AtomicReference:

用于对引用类型进行原子操作。

原理:它封装了一个对象引用,并通过CAS操作来原子地更新引用指向的对象。compareAndSet方法会比较当前引用与预期引用是否一致,一致则替换为新的引用,否则不作更改。同样,volatile关键字确保了对象引用的可见性。

AtomicIntegerArray 和 AtomicLongArray:

分别用于对整型数组和长整型数组进行原子操作。

原理:这两个类提供了对数组元素的原子更新操作,如getAndAdd、compareAndSet等。它们同样基于CAS机制,在更新数组元素时确保原子性,同时使用volatile数组元素来保证多线程环境下的可见性。

AtomicStampedReference:

带有标记(stamp)的引用类型原子操作类。

原理:除了维护一个引用外,还附加了一个整数标记。在进行原子更新时,不仅比较引用本身,还会比较标记值。这种设计可以解决ABA问题(即一个值被多次改变后又变回原始值,但期间发生了其他变化,仅通过比较值本身无法察觉)。compareAndSet方法会同时检查引用和标记是否符合预期,只有两者都满足条件才会更新。

AtomicIntegerFieldUpdater 和 AtomicLongFieldUpdater,以及 AtomicReferenceFieldUpdater:

这些类允许对指定类的某个非静态整型、长整型或引用类型字段进行原子更新。

原理:它们使用反射机制获取并操作指定对象的字段,同样基于CAS来实现原子更新。由于需要反射,使用时需提供目标类、字段名和访问权限修饰符。这些类适用于无法直接修改源代码以使用原子类的情况,但使用较为繁琐,且可能存在性能损失。

注:CAS是一种基于硬件级别的无锁同步算法,它通过原子性地比较和交换内存中的值来实现线程安全的更新操作。在Java中,CAS主要通过Unsafe类提供的方法实现,并被广泛应用在java.util.concurrent.atomic包下的原子类中。虽然CAS带来了高性能和无阻塞的优点,但也存在ABA问题、潜在的自旋开销以及对复杂同步场景支持不足等挑战。

  如果大家需要视频版本的讲解,欢迎关注我的B站:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1676450.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

查找总价格为目标值的两个商品(双指针)

算法原理: 其实我们首先想到的方法肯定是暴力,两个for循环嵌套就能找到,但肯定会超时。 其实啊一切算法的总结都是在暴力的基础上进行的,算法其实就是对暴力进一步的优化。 定义两个指针,分别指向两端,然后…

单用户模式破解root密码

目录 一. 破解root密码 1. 查看操作系统版本 2.重启系统,进入grub菜单,选择要使用的内核,按e进入​编辑 3. 找到linux16那一行,把光标移动到最后,添加 init/bin/sh 然后ctrlx保存退出会自动进入系统 4. 进入系统后…

程序员就是管道工

程序是由指令和数据组成的。 指令是按照特定的顺序执行的,这些顺序好比水的流向。 要想让水高效地流向我们想要的地方,就要设计一个精良的管道系统,这好比算法。 剩下的就是修建管道了,你要知道各种管的型号、用途,然…

Java 包语句,看这一篇就够了

1.设计的文件层级 我们将“Package”文件夹称为根目录,“Level01”称为一级目录,“Level02”称为二级目录,以此类推。 2.发现在不同目录下的包名有如下特征: 根目录下的文件不需要包名,可以理解成包名为 “”一级目录…

洁太司检测试剂盒:肝癌早诊新利器,共筑健康未来

随着科技进步及医疗技术的不断创新,人类对疾病的早期诊断和治疗提出了更高的要求。 先思达生物近期推出的“洁太司-寡糖链检测试剂盒”,在原发性肝细胞癌的诊断领域实现了重大突破,获得了国家药品监督管理局(NMPA)的三…

8.基于鱼鹰优化算法(OOA)优化VMD参数(OOA-VMD)

代码原理 鱼鹰优化算法(Osprey Optimization Algorithm, OOA)是一种基于仿生学原理的启发式优化算法,它模拟了鱼鹰觅食的行为,通过调整搜索空间中的个体位置来优化目标函数。 鱼鹰优化算法可参考:鱼鹰优化算法(Ospre…

【系统运维】如何查找用户账号锁定位置

【问题】AD环境下,经常会遇到用户账号因输错密码次数超限而被锁的情况。 如果AD环境较简单还好说,但如果域控很多,要定位用户账号被锁在哪里就有点小麻烦了,比如开发人员可能会频繁登录多台服务器,如果某台服务器缓存了…

【Android Studio】使用UI工具绘制,ConstraintLayout 限制性布局,快速上手

文章目录 一、前言二、绘制效果三、ConstraintLayout 使用方法3.1 创建布局文件3.2 替换配置3.3 设置约束,步骤13.4 设置约束,步骤23.5 其他设置 四、结束 一、前言 在进行Android APP开发过程中,减少layout嵌套即可改善UI的绘制性能&#x…

2024CCPC全国邀请赛(郑州)暨河南省赛

2024CCPC全国邀请赛(郑州站)暨河南省赛 一铜一银,虽不是线下第一次参赛但是第一次拿xcpc奖牌,还有个国赛奖真是不戳。感谢学长,感谢队友! 虽然遗憾没有冲到省赛金,不过还有icpc商丘&#xff08…

【Transformer-BEV编码(10)】CVPR2021 PYVA 第一个明确提到 cross-attention decoder可用于视图转BEV

论文信息 论文名:Projecting Your View Attentively: Monocular Road Scene Layout Estimation via Cross-view Transformation 中文:通过交叉视图变换(crossview transform module)估计单目道路场景布局 数据集:KITT…

【Android】Apk图标的提取、相同目录下相同包名提取的不同图标apk但是提取结果相同的bug解决

一般安卓提取apk图标我们有两种常用方法: 1、如果已经获取到 ApplicationInfo 对象(假设名为 appInfo),那么我们获取方法为: appInfo.loadIcon(packageManager)// 返回一个 Drawable 对象2、 如果还没获取到 Applica…

Springboot+mybatis-plus+dynamic-datasource+继承DynamicRoutingDataSource切换数据源

Springbootmybatis-plusdynamic-datasource继承DynamicRoutingDataSource切换数据源 背景 最近公司要求支持saas,实现动态切换库的操作,默认会加载主租户的数据源,其他租户数据源在使用过程中自动创建加入。 解决问题 1.通过请求中设置租…

IEEE(电气电子工程师学会)数据库文献去哪里查询下载

IEEE数据库简介: IEEE(电气电子工程师学会)是目前全球科学技术领域领先的专业机构。其期刊在电气电子工程、计算机科学、人工智能、机器人、自动化控制、遥感和核工程领域的期刊影响因子和被引用量都名列前茅。而其学术会议涉及领域广&#…

2025考研专业课、英语、数学、政治视频大全,整理全了!

考研季又到了,备考的小伙伴们,你们准备好了吗? 时间管理 考研是一场与时间的赛跑,合理安排时间,让复习更高效! - 制定详细的学习计划,每天、每周、每月都有明确目标 - ‍♂️ 保持一定的学习…

Agilent MSO9404A、Keysight MSO9404A示波器,4 GHz,4 通道,20 GSa/s

Agilent MSO9404A、Keysight MSO9404A、HP MSO9404A 示波器,4 GHz,4 通道,20 GSa/s Keysight MSO9404A 示波器配备 15 英寸 XGA 显示屏,封装深度仅为 9 英寸(23 厘米),重量仅为 26 磅&#xff…

联合新能源汽车有限公司出席2024年7月8日杭州快递物流展

参展企业介绍 青岛联合新能源汽车有限公司(简称:联合汽车),是一家专注于纯电动汽车领域创新的科技公司,在国内率先提出车电分离,电池标准化并共享的方案,研发了包含标准电池、电池仓、可换电纯电…

《QT实用小工具·六十二》基于QT实现贝塞尔曲线画炫酷的波浪动画

1、概述 源码放在文章末尾 该项目实现了通过贝塞尔曲线画波浪动画,可控制 颜色密度速度加速度 安装与运行环境 语言:C 框架:Qt 11.3 平台:Windows 将屏幕水平平均分为10块,在一定范围内随机高度的12个点(…

论Java和C++方向选择

目录 1.难度2.就业压力3.岗位选择4.薪资待遇5.选择建议小结 1.难度 Java ,C, 测开,整体来说三个方向难度相当。 1.仅从语法角度来看,c 是掌控一切,知识都要懂一点,而java的特点在于省心,都封装…

【Unity Shader入门精要 第7章】基础纹理补充内容:MipMap原理

1.纹理采样 我们对纹理采样进行显示的过程,可以理解为将屏幕上的一个像素(下文用像素表示)映射到纹理上的一个像素(下文用纹素表示),然后用纹理上的这个像素的颜色进行显示。 理想情况下,屏幕…

河北霖超新材料科技有限公司邀您见证2024杭州数字物流展行业变革

参展企业介绍 河北霖超新材料科技有限公司是一家塑胶注塑制品生产的民营企业。是集模具开发、注塑加工、塑胶制品于一体的塑料配套产品解决方案提供商。主营:ABS塑料件、尼龙垫片、尼龙滑轮、护丝帽、聚氨酯制品、尼龙制品等产品。霖超公司发展几年来生产过几百种产…