首页 > 解决方案 > 真的需要单例类中的双重锁定吗?

问题描述

在设计 Singleton 类时,是否需要使用双重检查?为什么我不能if在块中也放一个条件synchronize?还是有什么破绽?

 public static Singleton getInstance() {
    synchronized(Singleton.class) {    
    if (singleton == null) {
        singleton = new Singleton();
      }
    }

   return singleton;
}

标签: java

解决方案


外部的检查synchronized不是必需的,但是,只要您getInstance()多次调用,它就会提高性能。使用synchronized非常昂贵,但只是检查== null非常便宜。通常,当您调用 时getInstance(),已经构建了一个实例,因此如果您总是先检查,== null您可以尽量减少使用的次数synchronized


推荐阅读