写法:懒汉式(略)、饿汉式(略)、静态内部类、双重检查锁、枚举
静态内部类:
静态内部类当getInstance方法第一次被调用的时候,它第一次读取SingletonHolder.instance,导致SingletonHolder类得到初始化;而这个类在装载并被初始化的时候,会初始化它的静态域,从而创建Singleton的实例,由于是静态的域,因此只会在虚拟机装载类的时候初始化一次,并由虚拟机来保证它的线程安全性。
双重检查锁
双重检查锁如果不加volatile,因为singleton =new Singleton()不是原子操作【详见JAVA虚拟机学习对象创建过程】,导致因指令重排序使instance指向一片还未创建singleton的内存空间,使得其他线程执行null==singleon为true获得未完全初始化的对象。
枚举
枚举在枚举类中还可以有自己的方法
网友评论