关于两种单例写法的探讨

2017-11-24  本文已影响0人  李翾

第一种 :

class Single {
private static final Single ourInstance = new Single();

public String name = "ltf";
static Single getInstance() {
    return ourInstance;
}

private Single() {
}

}

第二种:

public class SingleHolder {

private SingleHolder(){

}

private static class SingleInnerHolder{

    private static SingleHolder singleHolder = new SingleHolder();
}

第一种在Android Studio里面,创建单例的时候,谷歌是推荐我们这种写法。
第二种叫Lazy initialization holder class,Lazy在哪儿,我对这个方法的疑惑是静态内部类的加载时间,百度到一番话:“静态内部类和非静态内部类一样,都是在被调用时才会被加载”,如果这个句话真,那么这种单例写法实现懒加载就成立。当然,“静态内部类和非静态内部类一样,都是在被调用时才会被加载”这句话是别人论证出来的,那么我先认为他是对的,在工作中去验证。

后续:

还有第三种叫double-checked locking,
private static volatile Something instance = null;

public Something getInstance() {
if (instance == null) {
synchronized (this) {
if (instance == null)
instance = new Something();
}
}
return instance;
}
参阅资料:http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html#volatile

上一篇 下一篇

猜你喜欢

热点阅读