一、使用内部类进行单例
public class Singleton{
private Singleton(){}
public Static getInstance(){
return SingleHolder.instance;
}
private class SingleHolder{
private final static Singleton instance = new Singleton();
}
}
在这个实现中,用内部类来保护单例,当Singleton类被加载时,内部类不会被初始化,所以可以确保Singleton类被载入JVM时,不会初始化单例类,当getInstance方法被调用时,才会加载SingleHolder,从而初始化instance,同时,由于实例的建立是在类加载时完成的,故天生对多线程友好,getInstance()方法也不需要使用synchronized修饰,因此,这种实现能兼顾前两种写法的优点(延迟加载,非同步)。