Android--Incorrect lazy initialization of static field.
Posted chaoyu168
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android--Incorrect lazy initialization of static field.相关的知识,希望对你有一定的参考价值。
private static ActivityLifeManager sInstance;
public static ActivityLifeManager getInstance()
if (sInstance == null)
sInstance = new ActivityLifeManager();
return sInstance;
主要原因是线程安全问题。多线程有可能会对该方法调用造成实例化多次。在该方法加synchronized。
双重加锁可能存在的一个问题:
例如线程1已经分配了地址给instance 但是还没有初始化, 此时线程2 判断intance不是null 直接返回
解决:
volatile的:禁止指令重排序优化,也就保证了instance变量被赋值的时候对象已经是初始化过的,从而避免了上面说到的问题。
最终改为:
private static volatile ActivityLifeManager sInstance;
public static ActivityLifeManager getInstance()
if (sInstance == null)
synchronized (ActivityLifeManager.class)
if (sInstance == null)
sInstance = new ActivityLifeManager();
return sInstance;
以上是关于Android--Incorrect lazy initialization of static field.的主要内容,如果未能解决你的问题,请参考以下文章
五.Classification (I) – Tree, Lazy, and Probabilisti