第一种可用单例模式设计
当第一次加载Singleton类时会初始化single,资源利用率高,效率高。
第一次加载时慢,在高并发的情况下有一定的缺陷。
public class Singleton {
private static Singleton single = null;
private Singleton() {
// TODO Auto-generated constructor stub
}
public static Singleton getInstance() {
if (single == null) {
synchronized (Singleton.class) {
if (single == null) {
single = new Singleton();
}
}
}
return single;
}
}
第二种可用单例模式设计
当第一次加载Singleton类时不会初始化single。
可以确保线程安全,也可以保证单例对象唯一性,同时延迟了单例的实例化。
public class Singleton {
private Singleton() {
// TODO Auto-generated constructor stub
}
public static Singleton getInstance() {
return SingletonHolder.single;
}
private static class SingletonHolder {
private static final Singleton single = new Singleton();
}
}
}
近期评论