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

  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.hqwc.cn/news/704294.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手机如何下载短视频到本地:成都鼎茂宏升文化传媒公

手机如何下载短视频到本地 ​随着移动互联网的迅猛发展,短视频已经成为人们生活中不可或缺的一部分。从娱乐、学习到社交,短视频以其短小精悍、内容丰富的特点,吸引了大量用户的关注。然而,有时我们可能希望将喜欢的短视频保存到…

jspXMl标记语言基础

1.打开命令框进入数据库 打开eclipse创建需要连接的项目 粘贴驱动程序 查看驱动器 使用sql的包 int代表个 conlm代表列名 <%page import"java.sql.ResultSet"%> <%page import"java.sql.Statement"%> <%page import"java.sql.Connect…

基于Java+SpringBoot+Mybaties-plus+Vue+elememt 驾校管理系统 设计与实现

一.项目介绍 系统角色&#xff1a;管理员、驾校教练、学员 管理员&#xff1a; 个人中心&#xff1a;修改密码以及个人信息修改 学员管理&#xff1a;维护学员信息&#xff0c;维护学员成绩信息 驾校教练管理&#xff1a;驾校教练信息的维护 驾校车辆管理&…

如何找到MySQL中存储引擎所对应的表空间并且打开?

在上节课我们学习了数据库&#xff08;MySQL&#xff09;进阶&#xff1a;存储引擎&#xff0c;有不少同学产生疑惑&#xff0c;到底要怎么找到表空间并且打开啊&#xff1f;这节课我们就来探讨。 首先&#xff0c;根据这个路径&#xff1a;C:\ProgramData\MySQL\MySQL Server…

程序在银河麒麟系统下实现开机自启及创建桌面快捷方式

目录 1. 机器环境说明 2. 程序开机自启动设置 2.桌面快捷方式设置 3. 附加说明 1. 机器环境说明 机器安装的银河麒麟操作系统属性如下&#xff1a; 2. 程序开机自启动设置 第1步&#xff1a;编写一个脚本,用于自动化启动&#xff0c;为便于后文描述&#xff0c;该脚本名称…

pikachu靶场通关之暴力破解token防爆破

这里写pikachu靶场token防爆破的第二种解法 用python脚本跑&#xff0c;下面是代码 import requests from bs4 import BeautifulSoup# url填自己的url url http://localhost:8086/pikachu-master/vul/burteforce/bf_token.php # 取出账号字典里的值&#xff0c;1.txt就是账号…

Google play开发者账号被封了,内购的款还可以提出来吗?

在Google paly上架过程中&#xff0c;很多开发者通过内购的方式来获取收益或变现。不过&#xff0c;有时会因为违反了Google play相关规定或其它原因&#xff0c;导致应用下架&#xff0c;账号被封&#xff0c;在这样的情况下&#xff0c;开发者们最关心的问题之一就是&#xf…

1. 杜克大学官方宣布2027届新生画像什么是vue关键特点核心概念简单示例生态系统

目录 1. 杜克大学官方宣布2027届新生画像 什么是vue 关键特点 核心概念 简单示例 生态系统 1. 杜克大学官方宣布2027届新生画像 杜克大学校报《The Chronicle》已连续第七年对杜克大学的一年级新生进行深入调查&#xff0c;探讨该群体家庭受教育背景、家庭收入水平以及…

放松冥想心得体会|流静冥想

冥想&#xff0c;古已有之。昔人云&#xff1a;“静以修身”&#xff0c;非虚言也。放松心灵&#xff0c;乃通往内在平和之路。社恐者&#xff0c;常困于喧嚣之境&#xff0c;心难宁静。然&#xff0c;以冥想之法&#xff0c;可徐徐引导&#xff0c;渐归宁谧。 坐于幽室&#x…

搭载全新升级viaim AI,讯飞会议耳机Pro 2首销价1399元起

2024年5月15日&#xff0c;人工智能硬件公司未来智能发布了讯飞会议耳机Pro 2、iFLYBUDS 2以及Kit 2三款旗舰新品&#xff0c;为用户带来全新升级的viaim AI&#xff0c;也为AIGC智能耳机树立了新标杆。 在发布会上&#xff0c;未来智能CEO马啸表示&#xff1a;在AIGC领域&…

低功耗音频编解码器CJC8990

由工采网代理的CJC8990是一款低功耗音频编解码器&#xff0c;拥有先进的功能并提供高质量音频&#xff0c;非常适合于便携式数字音频应用&#xff0c;支持多种音频数据格式&#xff0c;包括I2S, DSP模式。 产品介绍&#xff1a; 该芯片工作电压&#xff1a;1.5V&#xff5e;3…

qmake、CMake、make和Makefile

为了跟踪C工程的全部部分&#xff0c;要求有一种机制来精确地指定&#xff1a; 涉及的输入文件&#xff0c;如源代码文件&#xff1a;.cpp&#xff0c;头文件&#xff1a;.h建立程序时所需的工具&#xff0c;如编译器&#xff1a; g.exe&#xff0c;链接器&#xff1a;ld.exe&a…