单例模式初始化问题

462 阅读1分钟

单例模式初始化失败

代码分析

问题分析:

单例模式初始化的时候需要执行类中的无参构造方法,而构造方法中的 静态变量(mThreadPool)由于指令重排序的原因,静态变量的加载顺序不会和代码的顺序保持一致。 所以在初始化单例的时候NPE异常。 指令重排序详情跳转

问题代码

问题解决:

  1. 第一种方法就是通过添加Volatile注解,保障部分代码不会被指令重排序。
  2. 第二种可以通过InitializingBean 来将逻辑部分拆开加载;
  3. 利用静态代码块和静态变量的加载顺序的不同,来重新拆解逻辑(待补充);