Volatile的特征

Volatile的特征:

A、禁止指令重排(有例外)原理: 内存屏障/内存栅栏
B、可见性  原理:happens-before

 

对于volatile修饰的变量,jvm虚拟机只是保证从主内存加载到线程工作内存的值是最新的。、

Volatile 变量具有 synchronized 的可见性特性,但是不具备原子特性,不能保证线程安全

volatile只能保证变量的可见性,无法保证对变量的操作的原子性。

Volatile的内存语义:

当写一个volatile变量时,JMM会把线程对应的本地内存中的共享变量值刷新到主内存(可见性)。

 这里写图片描述

 

当读一个volatile变量时,JMM会把线程对应的本地内存置为无效,线程接下来将从主内存中读取共享变量。

 这里写图片描述

volatile 用于 单例模式 双重检查  禁止指令重排序优化,保证了instance变量被赋值的时候对象已经是初始化过的

posted @ 2018-03-02 10:25  stanljj  阅读(234)  评论(0编辑  收藏  举报