volitile关键字的作用及使用

1.作用

1)避免指令重排

举例子:uniqueInstance = new Singleton()

这个操作不是原子操作,步骤为:1.为 uniqueInstance 分配内存空间; 2. 初始化 uniqueInstance; 3. 将 uniqueInstance 指向分配的内存地址

如果指令重排,可能先执行13,再执行2

2)这个变量是共享且不稳定的, 每次使⽤它都到主存中进⾏读取

了解JMM模型,类似于CPU的缓存模型。

2.使用举例

单例模式:

public class Singleton {private volatile static Singleton uniqueInstance;
 private Singleton() {
 }
 public static Singleton getUniqueInstance() {
 //先判断对象是否已经实例过,没有实例化过才进⼊加锁代码
 if (uniqueInstance == null) {
 //类对象加锁
 synchronized (Singleton.class) {
 //对象为空才去创建(懒加载)
 if (uniqueInstance == null) {
 uniqueInstance = new Singleton();//⾮原⼦操作。注意!!!
       }
     }
   }
 return uniqueInstance;
 }
}

 

posted @ 2022-08-12 21:49  小小程序猿😜  阅读(105)  评论(0编辑  收藏  举报