Android 单例使用规范

2016-12-12  本文已影响27人  BetterCoder

规范

使用如下两种单例形式:

  1. 双重校验锁。
public class Singleton {
    private static volatile Singleton sInstance; // 需要volatile关键字防止指令乱序

    private Singleton() {}

    public static Singleton getInstance() {
        // 双重校验锁提高性能
        if (sInstance == null) {
            synchronized (Singleton.class) {
                if (sInstance == null) {
                    sInstance = new Singleton();
                }
            }
        }
        return sInstance;
    }
}
  1. 静态内部类。
public class Singleton {
    private Singleton() {}

    private static class SingletonHolder {
        // 虚拟机在这里会有锁
        private static final Singleton INSTANCE = new Singleton();
    }

    public static Singleton getInstance() {
        return SingletonHolder.INSTANCE;
    }
}

制定原则

  1. 单例的错误使用会导致一些诡异问题,增大发现成本。
上一篇 下一篇

猜你喜欢

热点阅读