https://www.toutiao.com/a7007270060909773348/?channel=&source=search_tab 单例模式的其中写法对比写的也很详细了;


1 总结:

从使用的角度来讲,如果不需要懒加载的话,直接饿汉式(线程安全)就行了;如果需要懒加载,可以考虑静态内部类,或者尝试一下枚举的方式(这两种都是利用了jvm的自身的特性,安全性杠杠的!)。
从面试的角度,懒汉式、饿汉式、双重校验锁饿汉式,这三种是重点。双重校验锁方式一定要知道指令重排是在哪,会导致什么问题

  1. 分配内存空间
  2. 初始化对象
  3. 将对象指向刚分配的内存空间
  4. 23 指令重排了,第一个线程先将对象指向特定的内存空间,没有完成初始化呢,这个时候第二个线程来了,我们检查到这个对象不为空,我们就返回了,但是返回的对象没有完成初始化;
  5. 这里到java对象初始化的具体过程了;单独开一个文章记录

image.pngimage.png
这个总结看不懂的话,看看文章一开始的那个链接,讲解的很是详细了;