单例模式

1分类

  常见的单例设计模式有饿汉式、懒汉式、同步懒汉式、双重锁 校验懒汉式、静态内部类饿汉式 

2代码

  1饿汉式                    

  优点:线程安全,效率较高                    

  缺点:不支持懒加载                    

  总结:开发中推荐使用

    public class Singleton {

        private static Singleton instance = new Singleton();

        private Singleton (){}

        public static Singleton getInstance() {

            return instance;

        }

    }

  2懒汉式

  优点:支持懒加载                    

  缺点:线程不安全、效率低                    

  总结 :开发中不推荐使用

    public class Singleton {

        private static Singleton instance;

        private Singleton (){}

        public static Singleton getInstance() {

            if (instance == null) {

                instance = new Singleton();

            }

            return instance;

        }

    }

  3同步懒汉式                    

  优点:线程安全,支持懒加载                    

  缺点:效率低下                    

  总结:解决了普通懒汉式的线程不安全问题,不推荐。                    

  public class Singleton {

       private static Singleton instance;

       private Singleton (){}

          public static synchronized Singleton getInstance() {

            if (instance == null) {

                instance = new Singleton();

            }

            return instance;

        }

  }

  4双重锁校验懒汉式                    

  优点:线程安全,支持懒加载,效率高。                    

  总结:开发中推荐使用。                     

  public class Singleton {

      private volatile static Singleton singleton;

      private Singleton (){}

      public static Singleton getSingleton() {

          if (singleton == null) {

               synchronized (Singleton.class) {

                 if (singleton == null) {

                      singleton = new Singleton();

                 }

             }

          }

        return singleton;

     }

 

  5静态内部类饿汉式     

  优点:线程安全,支持懒加载,效率高。                    

  总结:开发中推荐使用。           

  public class Singleton {

       private static class SingletonHolder {

           private static final Singleton INSTANCE = new Singleton();

       }

       private Singleton (){}

       public static final Singleton getInstance() {

           return SingletonHolder.INSTANCE;

       }

  }

3.总结

  在开发中,推荐大家使用饿汉式、双重锁校验懒汉式、静态内部类饿汉式。但是以上三种单例设计模式,依然存在致命缺陷,至于是什么缺陷,请关注软谋公众号,相关问题我们将在下一期文章中给出解决方案

 

 

posted @ 2018-10-22 09:54  ^sun^  阅读(107)  评论(0编辑  收藏  举报