mallorJava 发表于 2021-3-18 23:45

volatile关键字的详解

主要作用(先说作用,后分析):
1.控制被修饰的变量在内存操作上主动把值刷到主内存,JMM会把线程对应的CPU设置过期,从主内存中读取最新值。
2.防止指令重排(内存屏障),在读写前后各加一个StoreStore屏障,也就是四个位置,来保证重排序时来保证不能把内存屏障后的指令重排序到内存屏障前
3.volatile并不能解决原子性问题,若想解决原子性问题,可使用synchronized或者lock
            
上代码:





使用前:


使用后:





内存可见原理:


第二次发帖子,不太会排版,请勿见笑,各位大佬多多指教

mallorJava 发表于 2021-3-19 12:48

theStyx 发表于 2021-3-19 00:04
java中也有这个关键字嘛,我c++这边是相当于给到编译器一个建议去寄存器找值,但是鉴于现在的编译器都有优 ...

有这个关键字,这个关键字是JVM虚拟机提供的轻量级的同步机制,用来修饰变量,保证变量对线程的可见性

theStyx 发表于 2021-3-19 00:04

java中也有这个关键字嘛,我c++这边是相当于给到编译器一个建议去寄存器找值,但是鉴于现在的编译器都有优化所以这个关键字并不保证一定执行我记得好像是这样的

PpaPingggg 发表于 2021-3-18 23:59

用的eplices吗?怎么调黑背景

xym 发表于 2021-3-19 00:06

这个感觉有点不解,是不是哪里出错了?

victornanka 发表于 2021-3-19 00:06

感谢楼主,学习了!这也是面试常考的点

plauger 发表于 2021-3-19 00:57

在C++里的作用是:指示编译器对所修饰的变量不作寄存器优化

yinyiniao 发表于 2021-3-19 01:02

这教程都有{:1_909:}像博客

14725836900 发表于 2021-3-19 09:32

PpaPingggg 发表于 2021-3-18 23:59
用的eplices吗?怎么调黑背景

这不是eclipse,是idea

mallorJava 发表于 2021-3-19 12:33

xym 发表于 2021-3-19 00:06
这个感觉有点不解,是不是哪里出错了?

主要是那个地方不解呢

mallorJava 发表于 2021-3-19 12:35

PpaPingggg 发表于 2021-3-18 23:59
用的eplices吗?怎么调黑背景

idea编辑器,自带的背景
页: [1] 2
查看完整版本: volatile关键字的详解