zoukankan      html  css  js  c++  java
  • 单例模式和多线程有没有关系?

    单例模式解决的问题:保证一个类仅有一个实例,并提供一个访问它的全局访问点

     
     
    多线程时双重锁定的单例模式:
    1. class Singletion
    2.     {
    3.         private static Singletion instance;
    4.         private static readonly object syncRoot = new object();
    5.         private Singletion() { }
    6.         public static Singletion GetInstan()
    7.         {
    8.             if (instance == null)
    9.             {
    10.                 lock (syncRoot)
    11.                 {
    12.                     if (instance == null)
    13.                     {
    14.                         instance = new Singletion();
    15.                     }
    16.                 }
    17.             }
    18.             return instance;
    19.         }
    20.     }
    为什么有两处if(instance==null)?   --当为null时并且同时有2个线程调用GetInstan()时,它们将都可以通过第一重的判断,然后由于lock机制,一个线程进入排队,当第一个线程出来后如果没有第二层判断将重新创建
     
     
    静态化下多线程时的单利模式:
        /// <summary>
        /// sealed修饰符可以应用于类、实例方法和属性。密封类不能被继承
        /// </summary>
    1.     public sealed class Singletion
    2.     {
    3.         private static readonly Singletion instance = new Singletion();
    4.         private Singletion() { }
    5.         public static Singletion GetInstan()
    6.         {
    7.             return instance;
    8.         }
    9.     }
     这样写依赖于公共语言运行库来初始化变量,由于构造函数是私有的所以不能在类本身以外实例化Singletion类;因此变量的引用的是可以在系统中存在的唯一实例。这种方式是在自己被加载时就将自己实例化,所以被称为饿汉式单利模式;原先的要在第一次被引用时才会将自己实例化被称为懒汉示
    作者:大胖儿在努力 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    IPython notebook(Jupyter notebook)指定IP和端口运行
    spark-2.2.0安装和部署——Spark集群学习日记
    安装Scala-2.11.7——集群学习日记
    hadoop2.7.3在centos7上部署安装(单机版)
    Centos7下面配置静态IP
    css 3列
    css 日历组件(浮雕效果)
    if(!document.getElementById) return false; JS里这句是什么意思?
    网页中图片路径错误时显示默认图片方法
    css3 图片放大缩小闪烁效果
  • 原文地址:https://www.cnblogs.com/cuijl/p/4493954.html
Copyright © 2011-2022 走看看