作业帮 > 综合 > 作业

哪位大虾帮我分析一下这两种单例模式哪一种比较好

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/06/11 06:28:06
哪位大虾帮我分析一下这两种单例模式哪一种比较好
public class Singleton {
private static volatile Singleton instance = null;
// private constructor suppresses
private Singleton(){
}
public static Singleton getInstance() {
// if already inited,no need to get lock everytime
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
public class Singleton {
private static volatile Singleton instance = new Singleton();
public static Singleton getInstance() {
return instance;
}
}
第一种:懒汉式单例模式
第二种:饿汉式单例模式
第一种好呗,第一种线程安全,多线程并发的访问这个getInstance() 时,比如线程A和B同时执行到了Synchronized(singleton.class),只有其中一个线程能获得锁,比如是A获得了锁,执行完毕后,由B获得同步锁,再检查一下singleton是否为空,为空就继续执行,这一步是为了避免出现两个singleton实例的情况,这叫双重检查模式(DCL),第二种没啥说的了,一个多线程访问,就混乱了.