java设计模式-单例设计模式详解

单例设计模式的实现方式:1.立即加载/“饿汉模式”  2.延迟加载/“懒汉模式”  3.使用静态内部类方式实现  4.使用反序列化与序列化方式实现  5.使用enum数据类型实现

一、立即加载/“饿汉模式”

public class MySingleton{
  private static MySingleton mySingleton = new MySingleton();

  private MySingleton(){
  }

  public static MySingleton getnstance(){
  return mySingleton;
  }
}

二、延迟加载/“懒汉模式”

public class MySingleton{
   private static MySingleton mySingleton;

   private MySingleton(){
   }

   public static MySingleton getInstance(){
     if(mySingleton != null){
     }else{
             mySingleton = new MySingleton();
        }
     return mySingleton;
   }
 }

2.1 延迟加载/“懒汉模式”的缺点

  在多线程中,懒汉模式会创建出“多例”。

2.2懒汉模式的解决方案

  1)方法上声明synchronized关键字 

public class MySingleton{
   private static MySingleton mySingleton;

   private MySingleton(){
   }

   synchronized public static  MySingleton getInstance(){
     if(mySingleton != null){
     }else{
             mySingleton = new MySingleton();
        }
     return mySingleton;
   }
 }

缺点:整个方法上锁的方法效率太低了

  2)使用同步代码块

public class MySingleton{
   private static MySingleton mySingleton;

   private MySingleton(){
   }

   public static  MySingleton getInstance(){
     synchronized (MySingleton.class){
        if(mySingleton != null){
     }else{
             mySingleton = new MySingleton();
        }
     }   
     return mySingleton;
   }
 }

缺点:效率依然比较低

3) 使用DCL双重检查锁机制

public class MySingleton{
   private static MySingleton mySingleton;

   private MySingleton(){
   }

   public static  MySingleton getInstance(){
        if(mySingleton != null){
     }else{
            synchronized (MySingleton.class){
               if(mySingleton == null){
                 mySingleton = new MySingleton();
               }
            }
        }   
     return mySingleton;
   }
 }

优点:既解决了懒汉模式的线程安全问题,又提高了synchronized的效率低下问题。

未完待续。。。

原文地址:https://www.cnblogs.com/mercuryji/p/singleton.html