当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

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

发表于: 2013-04-02   作者:Copperfield   来源:转载   浏览:
摘要: public static Singleton getInstance() { if (instance == null) { synchronized(Singleton.class) { //1 if (instance == null) //2 instance = new Singleton(); //3
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

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

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号