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

问题解决:
- 第一种方法就是通过添加Volatile注解,保障部分代码不会被指令重排序。
- 第二种可以通过InitializingBean 来将逻辑部分拆开加载;
- 利用静态代码块和静态变量的加载顺序的不同,来重新拆解逻辑(待补充);
单例模式初始化的时候需要执行类中的无参构造方法,而构造方法中的 静态变量(mThreadPool)由于指令重排序的原因,静态变量的加载顺序不会和代码的顺序保持一致。 所以在初始化单例的时候NPE异常。 指令重排序详情跳转
