Java知识分享网 - 轻松学习从此开始!    

Java知识分享网

Java1234官方群25:java1234官方群17
Java1234官方群25:838462530
        
SpringBoot+SpringSecurity+Vue+ElementPlus权限系统实战课程 震撼发布        

最新Java全栈就业实战课程(免费)

springcloud分布式电商秒杀实战课程

IDEA永久激活

66套java实战课程无套路领取

锋哥开始收Java学员啦!

Python学习路线图

锋哥开始收Java学员啦!
当前位置: 主页 > Java文档 > Java基础相关 >

volatile相关理论知识 PDF 下载


分享到:
时间:2020-12-18 19:37来源:http://www.java1234.com 作者:转载  侵权举报
volatile相关理论知识 PDF 下载
失效链接处理
volatile相关理论知识   PDF 下载


本站整理下载:
提取码:f5fp 
 
 
相关截图:
 
主要内容:

初步认识 Volatile
一段代码引发的思考 
下面这段代码,演示了一个使用 volatile 以及没使用
volatile 这个关键字,对于变量更新的影响
public class VolatileDemo {
 public /*volatile*/ static boolean stop=false;
 public static void main(String[] args) throws 
InterruptedException {
 Thread thread=new Thread(()->{
 int i=0;
 while(!stop){
 i++;
 }
 });
 thread.start();
 System.out.println("begin start thread");
 Thread.sleep(1000);
 stop=true;
 } }
volatile 的作用 
volatile 可以使得在多处理器环境下保证了共享变量的可
见性,那么到底什么是可见性呢?不知道大家有没有思考
过这个问题
在单线程的环境下,如果向一个变量先写入一个值,然后
在没有写干涉的情况下读取这个变量的值,那这个时候读
取到的这个变量的值应该是之前写入的那个值。这本来是
一个很正常的事情。但是在多线程环境下,读和写发生在
不同的线程中的时候,可能会出现:读线程不能及时的读
取到其他线程写入的最新的值。这就是所谓的可见性
为了实现跨线程写入的内存可见性,必须使用到一些机制
来实现。而 volatile 就是这样一种机制
volatile 关键字是如何保证可见性的? 
我们可以使用【hsdis】这个工具,来查看前面演示的这段
代码的汇编指令,具体的使用请查看使用说明文档
在运行的代码中,设置 jvm 参数如下
【-server -Xcomp -XX:+UnlockDiagnosticVMOptions -
XX:+PrintAssembly -
XX:CompileCommand=compileonly,*App.*(替换成实际
运行的代码)】
然后在输出的结果中,查找下 lock 指令,会发现,在修改
带有 volatile 修饰的成员变量时,会多一个 lock 指令。lock
是一种控制指令,在多处理器环境下,lock 汇编指令可以
基于总线锁或者缓存锁的机制来达到可见性的一个效果。
为了让大家更好的理解可见性的本质,我们需要从硬件层
面进行梳理


 

------分隔线----------------------------

锋哥公众号


锋哥微信


关注公众号
【Java资料站】
回复 666
获取 
66套java
从菜鸡到大神
项目实战课程

锋哥推荐