做搜狗网站优化点击,dedecms做多语言的网站,制作移动网站公司,重庆seo收费下面我们来看一下volatile是如何解决可见性问题的呢?如果我们针对stop字段增加volatile关键字:
public static volatile boolean stopfalse; 然后#xff0c;使用hsdis工具获取IT编译器生成的汇编指令来查看volatile写操作带来的影响和变化。 接着#xff0c;设置J… 下面我们来看一下volatile是如何解决可见性问题的呢?如果我们针对stop字段增加volatile关键字:
public static volatile boolean stopfalse; 然后使用hsdis工具获取IT编译器生成的汇编指令来查看volatile写操作带来的影响和变化。 接着设置JVM运行时参数:
-server -Xcomp -XX:UnlockDiagnosticVMoptions -XX:PrintAssembly -XX:CompileCommand compileonly,*VolatileExample.*
得到的结果如下:
0x00000036864f3: lock add dword ptr [rsp],eh ;*putstatic stop
; - org.example.VolatileExample::clinit1 (line 10) 从上述结果中我们发现在main线程中修改stop变量的值时在修改命令前面会增加一个 Lock#信号这使得基于缓存锁/总线锁的方式达到一致性从而保证结果的可见。 关于hsdis 工具的使用方法,(自己去查找一下相关资源)感兴趣的朋友可以自己学习。 导致可见性问题的根本原因的分析到这里并没有结束因为除高速缓存带来的可见性问题外指令重排序也会导致可见性问题