您的位置:首页 > 其它

JVM:关于volatile型变量

2016-04-01 21:28 225 查看

关于violatile型变量的可见性

问题:为什么violatile具有可见性,但是多线程下对violatile变量进行自增操作也会不安全

Java内存模型如下



1.自增代码的字节码指令是非原子操作(字节码指令逻辑与操作过程相同,不贴出实际代码),操作过程:从主内存读-修改-重写入主内存,而可见性只有在主内存后才可见,一个线程的工作空间对于其他线程是不可见的

2.依照Java内存模型的可见性,可见性是指线程对其他线程对主内存变量的更改敏感,而不是对在工作内存内的修改敏感。每一次线程调用变量之前会刷新主内存。因此多线程下自增操作,即使是violatile,也是不安全的,但是并未违反可见性

reference:深入理解Java虚拟机 周志明 著
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jvm 多线程 内存