由于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的时候初始化实例,并且保证了没有多线程并发问题。
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
相关专题
- (6505篇文章)Java环境安装配置
- (9239篇文章)Java编程开发手册
- (0次浏览)Python Java实现:Jython 2.5a3 发布
- (0次浏览)Linux中java语言package初级应用
- (0次浏览)使用JPA的不同实现的配置
- (0次浏览)详解Java语言中内存泄漏及如何检测问题
- (0次浏览)网友共享:JAVA语言中的几个常见错误简析
- (0次浏览)Linux操作系统中java语言package初级应用
- (0次浏览)java应用:在Struts2下的应用配置
- (0次浏览)EJB3.1 将有哪些新增内容?
- (0次浏览)Java SE 6 Update 10发布了!
- (0次浏览)Eclipse svn更换帐号的方法



