使用内部类的方式实现单例,既可以做到延迟加载,也不必使用同步关键字。
/**
* @author wzx
* @time 2018/5/27
*/
public class Singleton {
private Singleton() {
System.out.println("Singleton is create");
}
private static class SingletonHolder {
private static Singleton singleton = new Singleton();
}
public static Singleton getInstancec() {
return SingletonHolder.singleton;
}
}
当Singleton 被加载时,SingletonHolder 并不会被初始化,故可确保当Singleton 类被加载到JVM时,不会初始化,当调用getInstancec()方法时,才会加载SingletonHolder ,从而初始化singleton。
由于实例的建立是在类加载时完成,故无需考虑多线程问题。