1、基础知识
类级内部类:有static修饰的成员式内部类;如果没有static修饰的成员式内部类被称为对象级内部类。它可以直接创建,与外部类不存在依赖关系,它只在第一次被使用的时候才会被装载。
2、实现代码
package goodsingleton;
public class Singleton {
/**
* 类级的内部类,与外部类无依赖关系,只有被调用到的时候才会装载
* @author Administrator
*
*/
private static class SingletonHolder{
/*
* 静态初始化器,由JVM来保证线程安全
*/
private static Singleton instance = new Singleton();
}
private Singleton(){
}
public static Singleton getInstance(){
return SingletonHolder.instance;
}
}
代码解析:
当getInstance方法第一次被调用的时候,它第一次读取SingletonHolder.instance,导致 SingletonHolder类得到初始化;而这个类在装载并初始化的时候,会初始化它的静态域,从而创建Singleton的实例,由于是静态的域,因此只会在虚拟机装载类的时候初始化一次,并由虚拟机来保证它的线程安全性。