类的加载过程
加载、验证、准备、解析、初始化

单例模式的推荐创建方式

  1. public class Singleton {
  2. private static class Holder {
  3. static final Singleton instance = new Singleton();
  4. }
  5. public static Singleton getInstance(){
  6. return Holder.instance;
  7. }
  8. }

这个骚操作的学名叫做 “基于类初始化的单例模式解决方案”
JVM 在Class被加载后,且被线程使用之前,也就是类的初始化阶段,会去获取一个锁。这个锁可以保证多个线程对同一个类进行初始化的时候,只有一个线程能初始化成功。