zoukankan      html  css  js  c++  java
  • 单例模式-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进行锁判断,相应的就牺牲了一部分性能。

  • 相关阅读:
    关于centos防火墙
    linux基础命令
    mysql经典语句
    异常处理
    抽象类
    特性-多态
    特性-继承
    特性-封装
    python模块/文件/日期时间
    python函数3-函数嵌套/递归/匿名函数
  • 原文地址:https://www.cnblogs.com/shindo/p/5313059.html
Copyright © 2011-2022 走看看