当前位置:网站首页>『每日一问』volatile干嘛的
『每日一问』volatile干嘛的
2022-07-25 09:16:00 【高级摸鱼工程师】
内存语义
volatile写:当写一个volatile变量的时候,JMM会把这个线程的本地内存中的共享变量全部刷新到主内存。注意,是全部,而不是仅仅volatile变量
volatile读:当读一个volatile变量的时候,JMM会将这个线程的本地内存置为无效,然后从主内存中读取共享变量。
以上两步一起来看的话,读线程在读一个volatile变量的时候,写线程在写这个volatile变量之前的所有对共享变量的操作都会立即变得对读线程可见。
内存语义的实现
之前说到过,重排序分为编译器和处理器重排两种。为了实现volatile的语义呢,JMM会限制这两种重排序。
针对编译器:
- 后一个操作的volatile写的时候,不管前一个操作是什么,都不能重排序。
- 前一个操作是volatile读的时候,不管后一个操作是什么,都不能重排序。
- 前一个操作volatile写,后一个操作volatile读,不能重排序。
针对处理器:
编译器在生成字节码的时候,会在指令序列中插入内存屏障来禁止特定类型的处理器重排序。
边栏推荐
猜你喜欢

ActiveMQ -- JDBC code of persistent mechanism

【npm】 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。

The garbage classification data set used in the excellent Yolo target detection training is shared - about 3000 labeled

实现简单的RESTful API服务器

Feiling ok1028a core board adapts to rtl8192cu WiFi module

360度拖拽全景图插件tpanorama.js

js触屏小游戏源码冰雪之旅

activemq--延迟投递和定时投递

How to realize the drop-down option box of wechat applet

activemq--可持久化机制之JDBC的journal
随机推荐
activemq--延迟投递和定时投递
【线程知识点】-- 自旋锁
Unity ugui interaction (new ideas)
registration status: 204
How does Flink SQL persist?
Nacos启动报错Unable to start web server
mysql中的数据结果排名
A picture to quickly understand envoyfilter in istio
activemq--可持久化机制之JDBC
[deep learning] mask Dino Trilogy - the correct way to open Detr Pandora's box
Network principle (2) -- network development
Additional: in the lower division / county (data sheet)
防抖与节流
Live broadcast preview | how to build an enterprise cloud management platform in the cloudy era?
LabVIEW experiment - temperature detection system (experimental learning version)
Silicon Valley classroom lesson 15 - Tencent cloud deployment
[stl]list Simulation Implementation
ActiveMQ -- kahadb of persistent mechanism
Illustration leetcode - 1184. Distance between bus stops (difficulty: simple)
@Scheduled源码解析