单例模式

    写法:懒汉式(略)、饿汉式(略)、静态内部类、双重检查锁、枚举

静态内部类:


单例模式_第1张图片
静态内部类


 当getInstance方法第一次被调用的时候,它第一次读取SingletonHolder.instance,导致SingletonHolder类得到初始化;而这个类在装载并被初始化的时候,会初始化它的静态域,从而创建Singleton的实例,由于是静态的域,因此只会在虚拟机装载类的时候初始化一次,并由虚拟机来保证它的线程安全性。


双重检查锁


单例模式_第2张图片
双重检查锁

如果不加volatile,因为singleton =new Singleton()不是原子操作【详见JAVA虚拟机学习对象创建过程】,导致因指令重排序使instance指向一片还未创建singleton的内存空间,使得其他线程执行null==singleon为true获得未完全初始化的对象。

枚举


 枚举

在枚举类中还可以有自己的方法

你可能感兴趣的:(单例模式)