解析==java volatile关键字

来源:互联网 发布:双击运行java文件 编辑:程序博客网 时间:2024/06/08 07:29
java volatile


程序多线程执行环境:
主内存
线程A +  线程A内存
线程B +  线程B内存


1.没有同步机制的一般情况下,jvm会对变量复制一份
主内存 (normal_var)
线程A +  线程A内存 (normal_var_copy_A)
线程B +  线程B内存 (normal_var_copy_B)
所以可以看到线程A和B是各自操作自己的复制变量,需要的时候才会写入主内存里。


2.使用同步机制volatile关键字,jvm不会复制变量
主内存 (normal_var)
线程A +  线程A内存 (normal_var)
线程B +  线程B内存 (normal_var)
所以可以看到线程A和B是操作主内存里的变量。
但是,变量一定是拥有原子特性的。
private volatile int i;
i++ (读值-修值-写值) 是一串原子的组合,不能保证同步,只可以是同一块内存。

0 0
原创粉丝点击