千家信息网

Java atomic原子类的使用方法是什么

发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章主要介绍"Java atomic原子类的使用方法是什么",在日常操作中,相信很多人在Java atomic原子类的使用方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希
千家信息网最后更新 2025年11月08日Java atomic原子类的使用方法是什么

这篇文章主要介绍"Java atomic原子类的使用方法是什么",在日常操作中,相信很多人在Java atomic原子类的使用方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Java atomic原子类的使用方法是什么"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

在讲atomic原子类之前先看一个小例子:

public class UseAtomic {public static void main(String[] args) {AtomicInteger atomicInteger=new AtomicInteger();for(int i=0;i<10;i++){Thread t=new Thread(new AtomicTest(atomicInteger));t.start();try {t.join(0);} catch (InterruptedException e) {e.printStackTrace();}}System.out.println(atomicInteger.get());}}class AtomicTest implements Runnable{AtomicInteger atomicInteger;public AtomicTest(AtomicInteger atomicInteger){this.atomicInteger=atomicInteger;}@Overridepublic void run() {atomicInteger.addAndGet(1);atomicInteger.addAndGet(2);atomicInteger.addAndGet(3);atomicInteger.addAndGet(4);}}

最终的输出结果为100,可见这个程序是线程安全的。如果把AtomicInteger换成变量i的话,那最终结果就不确定了。

打开AtomicInteger的源码可以看到:

// setup to use Unsafe.compareAndSwapInt for updatesprivate static final Unsafe unsafe = Unsafe.getUnsafe();private volatile int value;

volatile关键字用来保证内存的可见性(但不能保证线程安全性),线程读的时候直接去主内存读,写操作完成的时候立即把数据刷新到主内存当中。

CAS简要

/*** Atomically sets the value to the given updated value* if the current value {@code ==} the expected value.** @param expect the expected value* @param update the new value* @return {@code true} if successful. False return indicates that* the actual value was not equal to the expected value.*/public final boolean compareAndSet(int expect, int update) {return unsafe.compareAndSwapInt(this, valueOffset, expect, update);}

从注释就可以看出:当线程写数据的时候,先对内存中要操作的数据保留一份旧值,真正写的时候,比较当前的值是否和旧值相同,如果相同,则进行写操作。如果不同,说明在此期间值已经被修改过,则重新尝试。

compareAndSet使用Unsafe调用native本地方法CAS(CompareAndSet)递增数值。

CAS利用CPU调用底层指令实现。

两种方式:总线加锁或者缓存加锁保证原子性。

到此,关于"Java atomic原子类的使用方法是什么"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

原子 方法 使用方法 时候 线程 学习 内存 数据 保证 相同 安全 更多 结果 帮助 不同 实用 接下来 例子 关键 关键字 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 搜索引擎百度是服务器还是网站 引发网络安全图片 普陀区智能化软件开发代理品牌 国际工业网络安全法规 快递软件开发费用 网络安全一事两罚规定 回合类 游戏 服务器端 长岛微信小程序软件开发企业 互联网科技公司买理财 一年级画网络安全手抄报最简 ibm服务器换内存需要 双流区网络安全宣传活动 电竞经理服务器人满 网络安全用网图画 最高人民检察院网络安全 数据库满足原则 如何在服务器上删除qq聊天记录 数据库列定义类型是什么 网络安全技术考核方案 浪潮服务器进入管理口 网络游戏服务器编程pdf 多媒体和网络技术哪个好 学习网络技术的心得体会 网络安全法应健全什么制度 成都国滔网络技术有限公司 新疆的网络安全厂商 天津信息化软件开发服务五星服务 国防参考网络安全 服务器加内存要多少钱 榆林市第四届网络安全周启动
0