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关键字适用于一个线程写,多个线程读的场景。
相关推荐
谢亮_vipxieliang1 分钟前
Go 接口设计原则核心知识点
开发语言·ios·golang
Wang's Blog2 分钟前
Java框架 SpringCloud 快速入门: Feign 替代 RestTemplate 实现声明式远程调用
java·开发语言·spring cloud
谢亮_vipxieliang3 分钟前
Go 结构体与方法集核心知识点
java·开发语言·golang
郝学胜-神的一滴5 分钟前
Numpy数据处理详解 01:NumPy 从环境搭建到入门上手
开发语言·人工智能·python·程序人生·数据分析·numpy
尘客-追梦6 分钟前
qmake / jom / 影子构建:把编译管起来
开发语言·c++·qt
Ai-_Man9 分钟前
从聊天框到正式文档:AI导出鸭瞄准AI大模型应用的“最后一公里”
开发语言·前端·javascript·人工智能·小程序
EatFan11 分钟前
2026 Java 后端面试风向变了:八股文只是门槛,场景化追问才是淘汰线
java·开发语言·jvm·面试·后端面试·八股文·full gc
Q264336502316 分钟前
【有源码】基于Spring Boot+Vue的骑行爱好者平台的设计与实现-计算机毕设选题推荐
java·vue.js·spring boot·毕业设计·课程设计·数据可视化·源代码
xieliyu.18 分钟前
LeetCode 1419 数青蛙:状态模拟求最少青蛙数量|Java 题解
java·算法·leetcode
Wang's Blog19 分钟前
Java框架 SpringCloud 快速入门: 微服务配置拉取
java·spring cloud·微服务