Lazy Singleton的Java实现

王朝java/jsp·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

由于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的时候初始化实例,并且保证了没有多线程并发问题。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航