WEB开发网
开发学院WEB开发Jsp Lazy Singleton的Java实现 阅读

Lazy Singleton的Java实现

 2008-01-05 08:48:03 来源:WEB开发网   
核心提示:由于java的内存模型的原因,在C++中的双重检查模型在Java中不可用:public static Singleton getInstance() { if(instance==null) { synchronized(this) { if(instance==null) { instance=new Sin

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


Tags:Lazy Singleton Java

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接