都知道单例有饿汉式和懒汉式两种方式,但是对于懒汉式,由于线程安全问题,一直发展到双锁校验方式。而饿汉式虽然解决了线程安全问题,但在类加载的时候就创建对象,并常驻内存,会占用更多内存,于是我们使用静态内部类的方式解决这个问题。
<span style="color:#333333;">public class Singleton {
//依然私有构造方法
private Singleton(){
}
public static Singleton getInstance(){
return SingletonHolder.instance;
}
private static class SingletonHolder{
private static Singleton instance = new Singleton();
}
}</span>
这样在类加载的时候并不会创建对象,只有当调用getInstance()方法的时候才会产生单例对象。
此方法很好的将饿汉式和懒汉式结合起来,既实现延迟加载,又保证线程安全。