吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1429|回复: 11
收起左侧

[Java 转载] volatile关键字的详解

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

image.png



使用前:
image.png

使用后:


效果图

效果图



内存可见原理:
  

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

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 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
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
这教程都有像博客
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编辑器,自带的背景
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-10 10:50

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表