无论程序如何运行,采用单例模式的类,保证类的对象在内存中唯一。
1、饿汉式:因为饿,所以要立即吃饭,在定义类的静态私有变量同时进行实例化,线程安全。
public class Singleton {
private static final Singleton singleton = new Singleton();
private Singleton(){}
public static Singleton getInstance() {
return singleton;
}
}
2、懒汉式:这个人很懒,等用到你的时候才去实例化,延迟加载,非线程安全。
public class Singleton {
private static Singleton singleton = null;
private Singleton() {}
public static Singleton getInstance() {
if (singleton == null) {
singleton = new Singleton();
}
return singleton;
}
}
3、静态内部类:避免同步带来的性能损耗,又能延迟加载
public class Singleton {
private Singleton() {}
private static class SingletonHolder {
private static final Singleton singleton = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.singleton;
}
}
4、枚举:天然线程安全,可以防止反射生成实例
public enum Singleton {
INSTANCE;
public void init() {
System.out.println("资源初始化");
}
}