Java多线程-单例模式涉及的多线程问题

多线程下的单例:

饿汉式(不存在安全问题)

class Single // 类一加载,对象就已经存在了。
  {
   private Single() {
   }

   private static final Single s = new Single();
   public static Single getInstance() {
      return s;
   }
}


懒汉式

class Single1 // 类加载进来,没有对象,只能调用getInstance方法时,//才会创建对象。延迟加载
   {
   private static Single s = null;
   private Single() {
   }

   public static Single getInstance() {
      if (s == null) {
        synchronized (Single1.class) {
           if (s == null) {
              s = new Single();
           }
        }
      }
      return s;
   }
}

使用两个if(s==null),是为了提高效率,减少判断锁的次数。