服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

lazy singleton的java实现

由于java的内存模型的原因,在c++中的双重检查模型在java中不可用:

public static singleton getinstance() {
    if(instance==null) {
        synchronized(this) {
            if(instance==null) {
                instance=new singleton();
            }
        }
    }
    return instance;
}

如果采用synchronized方法,又会严重影响性能:

public static synchronized singleton getinstance() {
    if(instance==null) {
        instance=new singleton();
    }
    return instance;
}

如何实现lazy singleton?方法是利用java的classloader即时装载特性,使用一个singletonholder实现:

static class singletonholder {
    static singleton instance = new singleton();
}
public static singleton getinstance() {
    return singletonholder.instance;
}

这里利用java classloader特性,在第一次加载singletonholder的时候初始化实例,并且保证了没有多线程并发问题。

扫描关注微信公众号