一 点睛
Hold 方式的单例完全是借助了类加载的特点。
二 代码
package singleton.singleton3;
// final 不允许继承
public final class Singleton {
// 实例变量
private byte[] data = new byte[1024];
private static Singleton instance = null;
private Singleton() {
System.out.println("+++++");
}
// 在静态内部类中持有 Singleton 的实例,并且可被直接初始化
private static class Holder {
private static Singleton instance = new Singleton();
}
// 向 getInstance 方法加入同步控制,每次只能有一个线程能进入
public static Singleton getInstance() {
return Holder.instance;
}
public static void main(String[] args) {
System.out.println(Singleton.getInstance());
}
}
三 测试结果
+++++
singleton.singleton3.Singleton@7a81197d
如果注释掉 System.out.println(Singleton.getInstance()); 则什么都不打印。