JVM:关于volatile型变量

来源:互联网 发布:中世纪2优化9大百科 编辑:程序博客网 时间:2024/05/14 14:06

关于violatile型变量的可见性

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

Java内存模型如下
这里写图片描述

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

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

reference:深入理解Java虚拟机 周志明 著

0 0