标签:状态 webp 静态 对象 orm 程序 one 通过 class
可见性:可见性指的是一个线程对主内存的修改可以被其他线程及时地察觉到。
导致共享变量在线程间不可见的原因:
1、线程交叉执行
2、指令重排序结合线程交叉执行
3、共享变量的值没有及时更新到主存中
JVM提供了synchronized和volatile关键字来保证可见性
volatile:它通过内存屏障和禁止指令重排序来保证可见性
1、对volatile变量写操作时,会在写操作前后加入一条store内存屏障,然后将共享变量值刷新到主内存中。
2、对volatile变量读操作是,会在读操作后加入一条load内存屏障,从主存中读取最新变量到工作内存。
volatile写
volatile读
一般有两种情况使用volatile变量
1、用来作为状态标记量。
2、双重检测
1 public class SingletonExample { 2 private SingletonExample() { 3 4 } 5 //单例对象 6 private volatile static SingletonExample instance=null; 7 //静态的工厂方法 8 public static SingletonExample singletonExample() { 9 if(instance==null) {//双重检测机制 10 synchronized (SingletonExample.class) {//同步锁 11 if (instance==null) { 12 instance=new SingletonExample(); 13 } 14 } 15 } 16 return instance; 17 } 18 }
标签:状态 webp 静态 对象 orm 程序 one 通过 class
原文地址:https://www.cnblogs.com/ruiruijiang/p/12334911.html