Dan Li - JiyangM/spring GitHub Wiki
public class Singleton {
private static Singleton singleton = new Singleton();
private Singleton() {
}
public static Singleton getInstance() {
return singleton;
}
}
弊端: 对实例无法做到延迟加载,当初始化实例需要耗费资源时不适用!
public class Singleton {
private static Singleton singleton;
private Singleton() {
}
public static Singleton getInstance() {
synchronized (singleton) {
if (singleton == null) {
return new Singleton();
}
return singleton;
}
}
}
弊端: 虽然做到延迟加载,只有调用getInstance()时才会初始化变量,但是为了线程安全,引入了同步关键字,可想而知,在并发程序设计中,也不是非常靠谱。
public class Singleton {
private Singleton() {
}
private static class SingletonHolder {
private static Singleton singleton = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.singleton;
}
}
优点:
- 延迟加载:Singleton 被加载时,内部类不会实例化。
- 线程安全