volatile,最轻量的同步机制

目录

一、volatile

二、如何使用?

三、volatile关键字能代替synchronized关键字吗?

四、总结:


还是老样子,先来看一段代码:

我们先由我们自己的常规思路分析一下代码:子线程中,一直循环,直到ready被改为true,才能退出循环,然后打印number变量的值,我们在主线程中将ready修改为了true,那么子线程就可以打印number值了,但是结果与预期不同,主线程都结束了,子线程都还在循环中出不来,我们不是改了ready的值吗?这就说明子线程感应不到ready的变化,那怎么样才能保证让子线程能感应到ready的值被修改了呢?------使用volatile。

一、volatile

volatile关键字保证了不同线程对某个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其它线程来说是立即可见的。


二、如何使用?

在变量前添加volatile关键字就ok了!


三、volatile关键字能代替synchronized关键字吗?

用代码来说话,使用我们之前用的代码------计数:

可以看到,结果是不对的,说明volatile关键字不能保证线程安全。所以volatile关键字不能代替synchronized关键字。


四、总结:

  • volatile关键字只保证了线程的可见性
  • volatile关键字不能代替synchronized关键字
  • volatile关键字不能保证线程安全
  • volatile关键字适用于一个线程写,多个线程读的场景。
相关推荐
阿正的梦工坊3 小时前
JavaScript 微任务与宏任务完全指南
开发语言·javascript·ecmascript
chools3 小时前
【AI超级智能体】快速搞懂工具调用Tool Calling 和 MCP协议
java·人工智能·学习·ai
知行合一。。。4 小时前
Python--05--面向对象(属性,方法)
android·开发语言·python
李白你好4 小时前
TongWeb EJB 反序列化生成工具(Java-Chain 插件)
java·安全
青梅橘子皮4 小时前
C语言---指针的应用以及一些面试题
c语言·开发语言·算法
浅时光_c4 小时前
3 shell脚本编程
linux·开发语言·bash
Evand J4 小时前
【三维轨迹目标定位,CKF+RTS,MATLAB程序】基于CKF与RTS平滑的三维非线性目标跟踪(距离+方位角+俯仰角)
开发语言·matlab·目标跟踪
U盘失踪了5 小时前
Java 的 JAR 是什么?
java·jar
今天又在写代码5 小时前
java-v2
java·开发语言
competes6 小时前
慈善基金投资底层逻辑应用 顶层代码低代码配置平台开发结构方式数据存储模块
java·开发语言·数据库·windows·sql