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关键字适用于一个线程写,多个线程读的场景。
相关推荐
考虑考虑几秒前
图片翻转
java·后端·java ee
白玉cfc5 分钟前
【OC】单例模式
开发语言·ios·单例模式·objective-c
十六点五5 分钟前
Java NIO的底层原理
java·开发语言·python
猿究院-赵晨鹤6 分钟前
Java I/O 模型:BIO、NIO 和 AIO
java·开发语言
叽哥16 分钟前
Kotlin学习第 5 课:Kotlin 面向对象编程:类、对象与继承
android·java·kotlin
叽哥16 分钟前
Kotlin学习第 6 课:Kotlin 集合框架:操作数据的核心工具
android·java·kotlin
心月狐的流火号21 分钟前
Spring Bean 生命周期详解——简单、清晰、全面、实用
java·spring
little_xianzhong22 分钟前
步骤流程中日志记录方案(类aop)
java·开发语言
抓饼先生24 分钟前
C++ 20 视图view笔记
linux·开发语言·c++·笔记·c++20
半桔36 分钟前
【STL源码剖析】二叉世界的平衡:从BST 到 AVL-tree 和 RB-tree 的插入逻辑
java·数据结构·c++·算法·set·map