【提问】java关键字volatile、双重检查 单例模式的应用
class MyClass {
private static volatile MyClass myClass = null;
private MyClass() {
}
public static MyClass getInstance() {
if(myClass == null) {
synchronized (MyClass.class) {
if(myClass == null) {
myClass = new MyClass();
}
}
}
return myClass;
}
}
volatile关键字我不太明白在上面代码中的作用,既然已经进行双重检查了,还有必要把myClass声明volatile吗?
求教,谢谢!
相关推荐
Java线程面试TOP50.pdf
在Java面试中, 面试官会从线程的基本概念问起, 如:为什么你需要使用线程, 如何创建线程,用什么方式创建线程比较好(比如:继承thread类还是调用Runnable接口),然后逐渐问到并发问题像在Java并发编程的过程中遇到了什么挑战,Java内存模型。本文总结了java线程常被问到的题目。
面试官的一道简单的单例模式问题给我问懵了,详解单例模式双重检查加锁为什么要加volatile关键字!
目录 1.场景: 2.对象的创建过程 3.指令重排 4.CPU执行时间片 5.指令重排对双重检查加锁模式的影响 1.场景: 面试官:有用过单例模式吗? 我:有有有(自信满满)。 面试官:说说单例模式几种写法? 我:懒汉式和饿汉式,懒汉式巴拉巴拉,饿汉式巴拉巴拉。 面试官:我们都知道synchronized加锁是比较耗费资源的,你这种写法每次访问都需要获得锁(基础的懒汉式写法),效率比较低,有什么优化的方式吗? 我:沉思片刻,脑海灵光一现。可以采用双重检查加锁的方式,巴拉巴拉。(还好之前看到过,暗自庆幸) 面试官:为什么双重检查加锁需要加volatile关键字? 我:要不我们问问度娘?
Java双重检查加锁单例模式的详解
今天小编就为大家分享一篇关于Java双重检查加锁单例模式的详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
Java中的双重检查(Double-Check)详解
主要为大家详细介绍了Java中的双重检查(Double-Check),感兴趣的小伙伴们可以参考一下
Java中volatile关键字的作用与用法详解
volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。这篇文章主要介绍了Java中volatile关键字的作用与用法详解的相关资料,需要的朋友可以参考下


Java SE

