美文网首页
关于两种单例写法的探讨

关于两种单例写法的探讨

作者: 李翾 | 来源:发表于2017-11-24 11:37 被阅读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

    相关文章

      网友评论

          本文标题:关于两种单例写法的探讨

          本文链接:https://www.haomeiwen.com/subject/axdxbxtx.html