当前位置: 首页 > backend >正文

java volatile关键字

volatile 是 Java 中用于保证多线程环境下变量可见性和禁止指令重排序的关键字。

普通变量不加volatile修饰有可见性问题,即有线程修改该变量值,其他线程无法立即感知该变量值修改了。代码:

    private static int intVal = 0; // 普通变量未加 volatile修饰static void testVolatile() {// 线程1检测intVal值变化new Thread(() -> {while (intVal == 0) { // 可能永远无法检测到 intVal 变为 1// 空循环}System.out.println("线程1检测到intVal已修改");}).start();// 线程2修改intVal值new Thread(() -> {try {Thread.sleep(100); // 模拟延迟} catch (InterruptedException e) {}intVal = 1; // 修改 flagSystem.out.println("线程2已设置 intVal = 1");}).start();}

打印:

发现线程1一直在循环,没有感知到变量值变化。

而加上volatile修饰后:

private static volatile int intVal = 0;  // 该变量加上volatile 修饰
// 其他代码不变 。。。

打印:

可以看到,线程2修改该变量值后,线程1立即就感知到该变量值变化,没有任何的延迟。

注意:volatile是轻量级同步工具,适用于单变量状态标记。 但不能保证复合操作(如自增)的原子性,需结合同步机制或原子类使用。

http://www.xdnf.cn/news/5106.html

相关文章:

  • LINUX CFS算法解析
  • YOLO目标检测算法
  • 麦角硫因:全能型护肤成分的技术突破与应用前景
  • 数据链路层服务
  • 基础RNN网络详解
  • 餐饮行业新风口:上门厨师服务系统的技术实现路径
  • 机器视觉的平板电脑屏幕组件覆膜应用
  • canoe的安装总结
  • requests库
  • 【笔记】BCEWithLogitsLoss
  • [Windows] 摄像头分身工具【CamSplitter】
  • upload文件上传
  • ES6新增Set、Map两种数据结构、WeakMap、WeakSet举例说明详细。(含DeepSeek讲解)
  • 【PINN】DeepXDE学习训练营(18)——operator-diff_rec_unaligned_pideeponet.py
  • 安全核查基线-1.LPD服务
  • 【软件设计师:体系结构】15.计算机体系结构概论
  • 将/root下的employee.json挪到/home/Downloads/
  • 让模型具备“道生一,一生二,二生三,三生万物”的现实实用主义能力
  • Stagehand:AI驱动的下一代浏览器自动化框架
  • 历史温度曲线能优化样本存储的条件还是确保样本处于稳定状态呢?
  • Linux系统入门第十一章 --Shell编程之函数与数组
  • CreArt 2.5.6 |无限AI图片生成工具,将文字描述转化为独特艺术作品,解锁高级版
  • FastChat部署大模型
  • 从量子计算到人工智能代理
  • PPT插入图像自带透明
  • 分布式处理架构
  • android动态调试
  • Android对工程中的String中文字符的整理
  • 多序列比对软件 Clustal Omega 介绍
  • 深度学习 ———— 迁移学习