博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单例模式和多线程有没有关系?
阅读量:4703 次
发布时间:2019-06-10

本文共 916 字,大约阅读时间需要 3 分钟。

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

 
 
多线程时双重锁定的单例模式:
  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类;因此变量的引用的是可以在系统中存在的唯一实例。这种方式是在自己被加载时就将自己实例化,所以被称为饿汉式单利模式;原先的要在第一次被引用时才会将自己实例化被称为懒汉示

转载于:https://www.cnblogs.com/cuijl/p/4493954.html

你可能感兴趣的文章
C++学习:任意合法状态下汉诺塔的移动(原创)
查看>>
leetcode133 - Clone Graph - medium
查看>>
一点小基础
查看>>
UNET学习笔记2 - 高级API(HLAPI)
查看>>
"ORA-00942: 表或视图不存在 "的原因和解决方法[转]
查看>>
Oauth支持的5类 grant_type 及说明
查看>>
C#中用DateTime的ParseExact方法解析日期时间(excel中使用系统默认的日期格式)
查看>>
W3100SM-S 短信猫代码发送 上
查看>>
Linux IO模式及 select、poll、epoll详解
查看>>
Log4j知识汇总
查看>>
C# winform 使用DsoFramer 创建 显示office 文档
查看>>
找工作的一些感悟——前端小菜的成长
查看>>
C#委托和事件的应用Observer模式实例
查看>>
codevs1018 单词接龙(DFS)
查看>>
内容分发系统MediaEW:助新闻媒体转投HTML5
查看>>
HTML5 Canvas ( 径向渐变, 升级版的星空 ) fillStyle, createRadialGradient
查看>>
Stanford Local Programming Contest 2011
查看>>
多线程中,NSOperationQueue和GCD的区别
查看>>
python生成.exe文件
查看>>
PHP面向对象(OOP)----分页类
查看>>