这种方式同样利用了 classloder的机制来保证初始化 instance 时只有一个线程。
而且还能实现按需加载,当程序启动 SingleForClassLoad 类被装载了,instance不一定被初始化。
因为 Instance 类没有被主动使用,只有显示通过调用getInstance方法时,才会显示装载 Instance 类,从而实例化instance。
想象一下,如果实例化 instance 很消耗资源,我想让他延迟加载,这种方式无疑是一种比较好的选择!
/**
* 这种方式同样利用了 classloder的机制来保证初始化 instance 时只有一个线程。
*
* 而且还能实现按需加载,当程序启动 SingleForClassLoad 类被装载了,instance不一定被初始化。
*
* 因为 Instance 类没有被主动使用,只有显示通过调用getInstance方法时,才会显示装载 Instance 类,从而实例化instance。
*
* 想象一下,如果实例化 instance 很消耗资源,我想让他延迟加载,这种方式无疑是一种比较好的选择!
*/
public class SingleForClassLoad {
/**
* 私有化构造函数
*/
private SingleForClassLoad() {
}
public static Instance getInstance() {
return Instance.INSTANCE;// 获取实例
}
/**
* 静态内部类,只加载一次
*/
private static class Instance {
private static final Instance INSTANCE = new Instance();
}
}