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.mzph.cn/web/12865.shtml

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

相关文章

OpenHarmony 实战开发——ArkUI容器类API介绍

容器类,顾名思义就是存储的类,用于存储各种数据类型的元素,并具备一系列处理数据元素的方法。在 ArkUI 开发框架中,容器类采用了类似静态的语言来实现,并通过 NAPI 框架对外提供。通过对存储位置以及属性的限制&#x…

C++map容器关联式容器

Cmap 1. 关联式容器 vector、list、deque、forward_list(C11)等STL容器,其底层为线性序列的数据结构,里面存储的是元素本身,这样的容器被统称为序列式容器。而map、set是一种关联式容器,关联式容器也是用来存储数据的&#xff0…

【开发】模型部署笔记

目录 模型量化 模型量化 1、模型量化优点 低精度模型表示模型权重数值格式为FP16(半精度浮点)或者INT8(8位定点整数),但是目前低精度往往就指代INT8。常规精度模型则一般表示模型权重数值格式为FP32(32位…

策略模式详解

策略模式 1 概述 先看下面的图片,我们去旅游选择出行模式有很多种,可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机。 作为一个程序猿,开发需要选择一款开发工具,当然可以进行代码开发的工具有很多,可以选择Idea进…

gitlab webhook触发jenkins任务

配置jenkins 安装gitlab插件 配置jenkins job 选择gitlab webhook触发 在高级中生成token 代码仓设置 新增webhook 配置webhook 测试连接 缺点,不能带gitLab事件的参数!!!

Spark RDD案例:统计网站每月访问量

这个项目利用Spark技术,通过统计网站访问记录中的日期信息,实现了对每月访问量的统计和排序。通过分析数据,我们可以了解到不同月份的网站访问情况,为进一步优化网站内容和推广策略提供数据支持。 使用Spark统计网站每月访问量 …

Apache2.4和PHP8的量子纠缠

Apache不建议你用,PHP建议使用

一种基于电场连续性的高压MOSFET紧凑模型,用于精确表征电容特性

来源:A Compact Model of High-Voltage MOSFET Based on Electric Field Continuity for Accurate Characterization of Capacitance(TED 24年) 摘要 本文提出了一种新的高压MOSFET(HV MOS)紧凑模型,以消…

【hana】hana1.0多容器常用命令

基础命令 数据库 连接数据库 hdbsql -u system -p {passwd} -i 02 -d {dbname}查询所有数据库 SELECT DATABASE_NAME, ACTIVE_STATUS FROM M_DATABASES;停止数据库,会修改数据库状态为No ALTER SYSTEM STOP DATABASE testdb; 启动数据库,会修改数据…

多线程的代码案例

目录 单例模式 饿汉模式 懒汉模式 阻塞队列 生产者消费者模型意义: 阻塞队列使用方法 实现阻塞队列 阻塞队列实现生产者消费者模型 定时器 实现简单的定时器 工厂模式 线程池 为啥呢? 从池子里面取 比 创建线程 效率更高 线程池的创建 怎么填坑 ThreadPoolExec…

图解堆排序【一眼看穿逻辑思路】

P. S.:以下代码均在VS2019环境下测试,不代表所有编译器均可通过。 P. S.:测试代码均未展示头文件stdio.h的声明,使用时请自行添加。 目录 1、堆的概念2、实现堆排序前的准备工作3、堆排序的思路3.1 第一步3.2 第二步 4、结语 1、…

音视频捕捉技术:LCC382 SDI采集卡深度解析

在日新月异的多媒体时代,高质量的音视频采集已成为众多领域不可或缺的一环。为此,灵卡科技精心打造了LCC382 —— 一款集高效性、灵活性与前沿技术于一身的SDI输入与环出、HDMI输出音视频采集卡,旨在满足从专业直播、视频会议到医疗影像、安防…

网页版Figma汉化

最近学习Figma,简单介绍一下网页版Figma的汉化方法 1.打开网址:Figma软件汉化-Figma中文版下载-Figma中文社区 2.下载汉化插件离线包 解压汉化包 3.点开谷歌的管理扩展程序 4.点击加载已解压的扩展程序,选择刚刚解压的包 这样就安装好了汉化…

QT状态机2-含终止状态的嵌套状态机

#include "MainWindow.h" #include "ui_MainWindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)

前馈神经网络FNN、多层感知机MLP和反向传播推导

目录 一、前馈神经网络FNN 激活函数的使用 二、多层感知机MLP MLP的典型结构 多层感知机MLP的特点 和前馈神经网络FNN的区别 三、传播推导 1、前向传播(Forward propagation) (1)输入层到隐藏层 (2)隐藏层到输出层 2、…

Java面试八股之WeakHashMap的工作原理

简述WeakHashMap的工作原理 弱键(Weak Keys): WeakHashMap 的键(keys)是通过 WeakReference 弱引用进行封装的。弱引用是一种特殊的引用类型,它不会阻止所引用的对象被垃圾收集器回收。这意味着&#xff…

冥想训练具体方法有哪些|流静冥想

冥想是一种身体的放松和敏锐的警觉性相结合的状态。 每日练习的好处远不止你花在集中注意力的那几分钟。桑托雷利是建在乌斯特的马萨诸塞大学医学院的减压诊所的所长,她也是《自愈》的作者,她说:"冥想是一种工具,通过练习&a…

云手机的优缺点分析

云手机,作为云计算领域的创新,致力于提供更为灵活的移动设备体验,特别适用于那些希望在不同设备之间无缝切换的用户。虽然云手机带来了一系列优势,但也伴随着一些挑战,比如网络延迟可能会影响用户体验,特别…

网络安全|隐藏IP地址的5种不同方法

隐藏计算机的IP地址在互联网在线活动种可以保护个人隐私,这是在线活动的一种常见做法,包括隐私问题、安全性和访问限制内容等场景。那么如何做到呢?有很5种方法分享。每种方法都有自己的优点和缺点。 1. 虚拟网络 当您连接到虚拟服务器时,您…