• 单例模式-Singleton Pattern


    关于单例模式,我们首先会想到其两种实现方式:饿汉式、懒汉式

    饿汉式:

    /**
     * 饿汉式单例模式
     */
    class Singleton{
        private static final Singleton singleton = new Singleton();
        private Singleton(){}
        public static Singleton getInstance(){
            return singleton;
        }
    }

    懒汉式(一般实现方式):

     1 /**
     2  *懒汉式单例模式--延迟加载 非线程安全
     3  */
     4 class Single{
     5     private static Single s = null;
     6     private Single(){}
     7     public static Single getInstance(){
     8         if(s == null){
     9             s = new Single();
    10         }
    11         return s;
    12     }
    13 }

    但是上面的饿汉式单例模式,如果在多线程调用的情况下,第8、9行就容易引发线程安全问题。

    为了解决这一问题,我们可以引入双重判断同步代码块解决:

    /**
     *懒汉式单例模式--线程安全
     */
    class Single{
        private static Single s = null;
        private Single(){}
        public static Single getInstance(){
            if(s == null){
                synchronized(Single.class){
                    if(s == null){
                        s = new Single();
                    }
                }
            }
            return s;
        }
    }

    事物总不是完美的,虽然例3解决了懒汉式单例模式的线程安全问题,但因为每一线程访问同步代码块时,都要对Single.class进行锁判断,相应的就牺牲了一部分性能。

  • 相关阅读:
    开放6379端口
    synchronized 实现同步的基础
    pythoning—— 5:实战篇(购物车)
    pythoning ——3、数据类型(字符串)
    pythoning ——2、数据类型(元组、序列)
    pythoning ——1、基础篇
    暗链/黑链
    什么是webshell
    获取当前设备IP
    生成公钥
  • 原文地址:https://www.cnblogs.com/shindo/p/5313059.html
Copyright © 2020-2023  润新知