当前位置:网站首页>看看volatile你深知多少
看看volatile你深知多少
2022-06-27 08:25:00 【C_x_330】
出于运行速率的考虑,java编译器会把经常经常访问的变量放到缓存(严格讲应该是工作内存)中,读取变量则从缓存中读。但是在多线程编程中,内存中的值和缓存中的值可能会出现不一致。volatile用于限定变量只能从内存中读取,保证对所有线程而言,值都是一致的。但是volatile不能保证原子性,也就不能保证线程安全
volatile关键字对任意单个volatile变量的的读写操作可以保证原子性,但类似于volatile++这种复合操作就无法保证原子性了。如果需要对这种复合操作保证原子性,最好用synchronized关键字。即synchronized保证三大性,原子性,有序性,可见性,volatile保证有序性,可见性,不能保证原子性。
总的来说: volatile的特性有
有序性,可见性
但是
新增
一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。
2)禁止进行指令重排序。
volatile只提供了保证访问该变量时,每次都是从内存中读取最新值,并不会使用寄存器缓存该值——每次都会从内存中读取。
而对该变量的修改,volatile并不提供原子性的保证。
由于及时更新,很可能导致另一线程访问最新变量值,无法跳出循环的情况
多线程下计数器必须使用锁保护
边栏推荐
- 即构「畅直播」,全链路升级的一站式直播服务
- Lvgl usage demo and instructions 2
- Creation process and memory layout of objects at JVM level
- 05 观察者(Observer)模式
- 八大误区,逐个击破(终篇):云难以扩展、定制性差,还会让管理员失去控制权?
- March into machine learning -- Preface
- 准备好迁移上云了?请收下这份迁移步骤清单
- Rust async: SMOL source code analysis -executor
- MySQL lock details
- Reference | upgrade win11 mobile hotspot can not be opened or connected
猜你喜欢

Mysql事务中MVCC理解超简单

JVM常见的垃圾收集器

Filter filter

盲測調查顯示女碼農比男碼農更優秀

Game asset reuse: a new way to find required game assets faster

并发编程JUC的AQS底层源码

粗读DS-TransUNet: Dual Swin Transformer U-Net for Medical Image Segmentation

Persistence mechanism of redis
![[12. maximum continuous non repeating subsequence]](/img/eb/230cd6062e28374c86863f2122e43b.png)
[12. maximum continuous non repeating subsequence]

盲测调查显示女码农比男码农更优秀
随机推荐
VIM from dislike to dependence (19) -- substitution
【云原生】2.3 Kubernetes 核心实战(上)
[paper reading] internally semi supervised methods
【每日一练】产品卡片动画效果的实现
2022.06.26 (LC Luo 6101 Luo determines whether the matrix is an X matrix)
第十一章 信号(一)- 概念
IMX8QXP DMA资源和使用(未完结)
SQL Sever column name or number of supplied values does not match the table definition
JVM层次上的对象的创建过程和内存布局
The difference between ArrayList and LinkedList
Preliminary understanding of C #
淘宝虚拟产品开店教程之作图篇
Pin details in rust
Closure problem
【论文阅读】Intrinsically semi-supervised methods
VIM from dislike to dependence (20) -- global command
【原创】TypeScript字符串utf-8编码解码
"Short video" Linxia fire rescue detachment carries out fire safety training
After working in a large factory for ten years with an annual salary of 400000 yuan, I was suddenly laid off. If the company wanted to abandon you, it wouldn't leave any kindness
The IPO of Yefeng pharmaceutical was terminated: Yu Feng, the actual controller who had planned to raise 540million yuan, made P2P investment