public class Singleton { //1.关键字volatile: 1.共享变量(从而获取最新数据),2.禁止重新排序 private volatile static Singleton uniqueSingleton; private Singleton() { } public Singleton getInstance() { //第一次检查到uniqueSingleton为空 if ( null == uniqueSingleton) { //synchronized同步代码块: //1.同时存在synchronized同步锁时,会出现阻塞,只能依次执行; //synchronized与非synchronized在多线程中可同步进行互不干扰; synchronized (Singleton. class ) { //在初始化之后,第二次判空, //防止多次实例化uniqueSingleton对象 if ( null == uniqueSingleton) { //创建对象 uniqueSingleton = new Singleton(); } } } return uniqueSingleton; } } |
总结: 双重检查锁定确保了在多线程环境下,uniqueSingleton
实例只会被初始化一次,并且保证其可见性。