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

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; // 修改值System.out.println("线程2已设置 intVal = 1");}).start();}

打印:

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

而加上volatile修饰后:

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

打印:

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

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

相关文章:

  • 二分系列题
  • 什么是AIOps
  • TDengine 在智慧油田领域的应用
  • 多序列比对软件 Clustal Omega 介绍
  • 嵌入式培训之C语言学习完(十七)结构体、共用体、枚举、typedef关键字与位运算
  • 信息系统项目管理师-软考高级(软考高项)​​​​​​​​​​​2025最新(十二)
  • 随笔-近况
  • 43.防雷击浪涌设计
  • VBA高级应用30例应用4:利用屏蔽事件来阻止自动运行事件
  • 气动带刮刀硬密封固定式对夹球阀:专为高粘度、强腐蚀性介质设计的工业解决方案-耀圣
  • 聊一部很癫的电影
  • 嵌入式学习笔记 - 垂直消隐期
  • vue数据可视化开发常用库
  • [特殊字符]渲染 101 云渲染:C4D XP 粒子创作者的高效解算新方案
  • World of Warcraft [CLASSIC][80][Deluyia] [Fragment of Val‘anyr]
  • 系统的从零开始学习电子的相关知识,该如何规划?
  • [C++类和对象]类和对象的引入
  • 应急响应基础模拟靶机-security1
  • 电位器如何接入西门子PLC的模拟量输入
  • 【技巧】如何把win10 wsl的安装目录从c盘迁移到d盘
  • 荷兰外交大臣费尔德坎普将访华
  • A股午后回暖,三大股指涨跌互现:港口板块重新走强,两市成交近1.1万亿元
  • 优质文化资源下基层,上海各区优秀群文团队“文化走亲”
  • 事关中国,“英伟达正游说美国政府”
  • 三人在共享单车上印小广告被拘,北京警方专项打击非法小广告
  • 海南保亭警方通报“两飞车党紧追女童”:两名初中生认错道歉