单例模式
饿汉式
public class Singleton {
private static final Singleton INSTANCE = new Singleton();
private Singleton(){
}
public static Singleton getInstance(){
return INSTANCE;
}
}
饿汉式,提前开辟了内存空间,资源浪费。
懒汉式
public class Singleton {
private static Singleton instance;
private Singleton(){
}
public static synchronized Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}
}
懒汉式只有需要的时候才加载。性能差。
DCL模式
public class Singleton {
private static Singleton instance;
private Singleton(){
}
public static Singleton getInstance(){
if(instance == null){
synchronized (Singleton.class){
if(instance == null){
instance = new Singleton();
}
}
}
return instance;
}
}
DCL模式资源利用率高,第一次执行方法是单例对象才会被实例化,第一次加载时会稍慢;
静态内部类实现单例模式
public class Singleton {
private static Singleton instance;
private Singleton() {
}
public static class SingletonInstance {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonInstance.INSTANCE;
}
}
线程安全,且懒加载。
因为是静态内部类,所以要在有引用了以后才会装载到内存的,所以是懒加载。
线程安全,是因为类加载过程是安全的。