`
Copperfield
  • 浏览: 254430 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
C407adc3-512e-3a03-a056-ce4607c3a3c0
java并发编程陷阱
浏览量:24592
社区版块
存档分类

并发编程陷阱系列(五)double check

 
阅读更多
public static Singleton getInstance()
{
  if (instance == null)
  {
    synchronized(Singleton.class) {  //1
      if (instance == null)          //2
        instance = new Singleton();  //3
    }
  }
  return instance;
}

The theory behind double-checked locking is perfect. Unfortunately, reality is entirely different. The problem with double-checked locking is that there is no guarantee it will work on single or multi-processor machines. 

 

推荐的做法:

    public class Singleton {  
        /**  
         * 类级的内部类,也就是静态的成员式内部类,该内部类的实例与外部类的实例  
         * 没有绑定关系,而且只有被调用到时才会装载,从而实现了延迟加载  
         */  
        private static class SingletonHolder{  
            /**  
             * 静态初始化器,由JVM来保证线程安全  
             */  
            private static Singleton instance = new Singleton();  
        }  
        /**  
         * 私有化构造方法  
         */  
        private Singleton(){  
        }  
        public static  Singleton getInstance(){  
            return SingletonHolder.instance;  
        }  
    } 

 参考:http://www.ibm.com/developerworks/java/library/j-dcl/index.html

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics