饿汉模式
public class Singleton {
private static Singleton instance=new Singleton();
private Singleton(){
}
public static Singleton getInstance(){
return instance;
}
}
生成实例时间:类加载时,所以不能延迟加载。
是否线程安全:是。
懒汉模式
public class Singleton {
private static Singleton instance;
private Singleton(){
}
public static Singleton getInstance(){
if (null == instance){
instance=new Singleton();
}
return instance;
}
}
生成实例时间:使用getInstance方法时,可以延迟加载。
是否线程安全:否。
双检锁
public class Singleton{
private volatile static Singleton instance;
private Singleton(){
}
public static Singleton getInstance(){
if (instance == null){
synchronized (Singleton.class){
if (instance == null){
instance=new Singleton();
}
}
}
return instance;
}
}
生成实例时间:使用getInstance方法时,可以延迟加载。
是否线程安全:是。
静态内部类
public class Singleton{
private Singleton(){
}
public static Singleton getInstance(){
return InstanceHolder.instance;
}
private static class InstanceHolder{
private static Singleton instance=new Singleton();
}
}
生成实例时间:使用getInstance方法时,可以延迟加载。
是否线程安全:是。