Java 杂谈

java单例模式各种实现方式

2019-03-14  本文已影响0人  麦穗一足

Java中单例模式是一种经常用到的模式,并且在面试中是经常出现的,那么我们今天就看看各种实现方式。

  1. 饿汉模式
public class Singleton{
    private static Singleton singleton = new Singleton();
    private Singleton(){};
    public static Singleton() getInstance(){
        return singleton;
    }
}
  1. 懒汉模式
  public class Singleton{
      private static Singleton singleton = null;
      private Singleton (){};
      public static Singleton getInstance(){
          if (singleton == null) {
              singleton = new Singleton();
          }
          return singleton;
      }
  }
  public class Singleton{
      private static Singleton singleton = null;
      private Singleton (){};
      public static synchronized Singleton getInstance(){
          if (singleton == null) {
              singleton = new Singleton();
          }
          return singleton;
      }
  }
  1. 双重校验锁(推荐)
   public class Singleton{
      private static Singleton singleton = null ;
      private Singleton (){};
      public statice Singleton getInstance(){
          if(singleton == null) { // 第一次检查
               synchronized (Singleton.class) {
                   if(singleton == null) { // 第二次检查
                       singleton = new Singleton();
                   }
               }
           }
           return singleton;
      }
   }
   public class Singleton{
      // 使用volatile 关键字防止指令重排
      private static volatile Singleton singleton = null ;
      private Singleton (){};
      public statice Singleton getInstance(){
          if(singleton == null) { // 第一次检查
               synchronized (Singleton.class) {
                   if(singleton == null) { // 第二次检查
                       singleton = new Singleton();
                   }
               }
           }
           return singleton;
      }
   }
  1. 静态内部类(推荐)
  public class Singleton{
      private static class SingletonHolder {
          public static Singleton singleton = new Singleton();
      }
      private Singleton(){};
      public static Singleton getInstance(){
          teturn SingletonHolder.singleton;
      }
  }
上一篇 下一篇

猜你喜欢

热点阅读