哪位大虾帮我分析一下这两种单例模式哪一种比较好public class Singleton {private static volatile Singleton instance = null;// private constructor suppressesprivate Singleton(){}public static Singleton getInstance() {// if already
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/16 18:38:22
哪位大虾帮我分析一下这两种单例模式哪一种比较好public class Singleton {private static volatile Singleton instance = null;// private constructor suppressesprivate Singleton(){}public static Singleton getInstance() {// if already
哪位大虾帮我分析一下这两种单例模式哪一种比较好
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;
}
}
哪位大虾帮我分析一下这两种单例模式哪一种比较好public class Singleton {private static volatile Singleton instance = null;// private constructor suppressesprivate Singleton(){}public static Singleton getInstance() {// if already
第一种:懒汉式单例模式
第二种:饿汉式单例模式
第一种好呗,第一种线程安全,多线程并发的访问这个getInstance() 时,比如线程A和B同时执行到了Synchronized(singleton.class),只有其中一个线程能获得锁,比如是A获得了锁,执行完毕后,由B获得同步锁,再检查一下singleton是否为空,为空就继续执行,这一步是为了避免出现两个singleton实例的情况,这叫双重检查模式(DCL),第二种没啥说的了,一个多线程访问,就混乱了.