zoukankan      html  css  js  c++  java
  • 单例模式

    public Singleton

    {

      public static Singleton singleton;

      

      public static Singleton GetInstance()

      {

        if(singleton == null)

        {

          singleton = new Singleton();  

          return singleton;

        }

          return singleton;

      }

    }

    1、多线程下 使用单例模式时可能会创建多个实例这一现象的解决方案。

    可以先将一个线程锁定。

    多线程访问GetInstance()中的if语句,比如,有两个线程同时到达

    如果Singleton !=null 的话,那么上面的问题是不会存在的,因为已经存在这个实例了,这样的话,所有的线程都无法进入if语句。

    也就是所有的线程都无法调用new Singleton()了。

    这样还可以保证应用程序生命周期中的实例只有一个。

    如果此时singleton == null 的话,那么意味着都是可以进入if语句的。

    那么就有可能出现的到哪里中有多个实例的问题。

    此时,我可以让一个线程先进入if语句块,然后我在外面对这个if语句块加锁,

    对第二个线程呢,由于if语句进行了加锁处理,所以这个进程就无法进入if语句块而处于阻塞状态。

    当进入了if语句块的线程完成new Singleton()后,这个线程便会退出if语句块。

    此时第二个线程就从

    public Singleton

    {

      public static Singleton singleton;

      public Object object;

      public static Singleton GetInstance()

      {

        if(singleton == null)//这个是很有必要的,防止每次进入的是都有去锁定程序块,这样如果singleton!=null的时候就不用过去锁定程序快乐

        {

         synchronized(object)

         {

            if(singleton==null)

            {

              

              singleton = new Singleton();  

              return singleton;

            }

         }

          

        }

        return singleton; 

      }

    }

  • 相关阅读:
    02 序列模型问题
    02 序列模型问题
    04 电路交换
    31 路由算法.md
    NumPy入门教程
    有穷自动机
    上下文无关语法
    基本乐理
    正则表达式
    【OpenCV入门教程之七】 玩转OpenCV源代码:生成OpenCV工程解决方案与OpenCV源码编译(转)
  • 原文地址:https://www.cnblogs.com/lobsterIT/p/4884560.html
Copyright © 2011-2022 走看看