保证一个类仅有一个实例,并提供一个访问它的全局访问点。
在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。

 public class SingletonTest{public static void Test(){var tasks = new List<Task>();for (int i = 0; i < 20; i++){tasks.Add(new Task(() =>{Singleton singleton = Singleton.Instance();singleton.GetData();}));}//并发执行20个任务tasks.AsParallel().ForAll(p => p.Start());}private class Singleton{/// <summary>/// 静态实例,利用静态字段把实例缓存起来/// </summary>private static Singleton singleton;/// <summary>/// 返回对象的唯一实例/// </summary>/// <returns></returns>public static Singleton Instance(){if (singleton == null){Console.WriteLine("实例化对象");singleton = new Singleton();}return singleton;}public void GetData(){Console.WriteLine("调用了getdata()");}}
}

看下执行结果

实例化对象动作执行了4次,说明并发情况下有问题;

改下实现方式,增加锁

  public static Singleton Instance(){if (singleton == null){lock (lockObj){Console.WriteLine("实例化对象");singleton = new Singleton();}}return singleton;}

看下执行结果

依然不能保证

加锁并双重验证

  public static Singleton Instance(){if (singleton == null){lock (lockObj){if (singleton == null){Console.WriteLine("实例化对象");singleton = new Singleton();}}}return singleton;}

看下执行结果

这下就不会有并发的问题了

转载于:https://www.cnblogs.com/sands/p/11460249.html

Singleton单例模式相关推荐

  1. socket可以写成单例嘛_精读《设计模式 - Singleton 单例模式》

    Singleton(单例模式) Singleton(单例模式)属于创建型模式,提供一种对象获取方式,保证在一定范围内是唯一的. 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 其实单例模 ...

  2. socket可以写成单例嘛_精读设计模式 Singleton 单例模式

    Singleton(单例模式) Singleton(单例模式)属于创建型模式,提供一种对象获取方式,保证在一定范围内是唯一的. 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 其实单例模 ...

  3. [设计模式] - Singleton单例模式

    一.介绍 单例模式是保证一个类仅有一个实例,并提供一个访问它的全局访问点. 在下面的情况下可以使用Singleton模式: 1.当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时: 2.当这 ...

  4. muduo源码剖析——Singleton单例模式之懒汉模式与DCL双重检查

    0 懒汉与饿汉 对于Singleton单例模式我们并不陌生,但我们常用的多是饿汉模式: Singleton实例的声明和实例化在instance()函数中同时完成. 而懒汉模式要求,Singleton实 ...

  5. Singleton(单例模式)创建型

    Singleton(单例模式) 一.概述 1.结构 2.适用场景 3.优缺点 二.懒汉单例模式 1.线程不安全的懒汉单例模式 2.线程安全的懒汉单例模式 3.同步锁模式 三.饿汉单例模式 四.Meye ...

  6. Scala 与设计模式(一):Singleton 单例模式

    本文由 Prefert 发表在 ScalaCool 团队博客. 二十年前,软件设计领域的四位大师( GoF ,"四人帮",又称 Gang of Four,即Erich Gamma, ...

  7. 设计模式(2)--Singleton(单例模式)--创建型

    1.模式定义: 单例模式确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 2.模式特点: (1)单例类只能有一个实例. (2)单例类必须自己创建自己的唯一实例. (3)单例类必须给所有 ...

  8. php实现单例模式类singletonv,php设计模式 singleton (单例模式)

    25种php设计模式,你全都知道吗?下面用代码介绍单例模式(singleton模式)<?php /** * 单例模式 * * 保证一个类仅有一个实例,并提供一个访问它的全局访问点 * */ cl ...

  9. 剑指offer (02):实现 Singleton 单例模式 (Python 实现详解)

    本文大部分内容来自于Python中的单例模式的几种实现方式的及优化 ,在此基础上进行修改,整理. 1 题目 单例模式(Singleton Pattern)是一种常用的软件设计模式.在它的核心结构中只包 ...

  10. 设计模式C++学习笔记之三(Singleton单例模式)

    单例模式看起来也蛮简单的,就是在系统中只允许产生这个类的一个实例,既然这么简单,就直接贴代码了.更详细的内容及说明可以参考原作者博客:cbf4life.cnblogs.com. 3.1.解释 main ...

最新文章

  1. 香蕉派 banana pi github 最新Linux 代码升级到kernel 4.2.
  2. 自动sqlldr脚本
  3. Vim 快捷键整理【转】
  4. 软件系统维护是一项不吸引人的工作_测试人员必须了解的软件测试工作规范
  5. 【LeetCode从零单排】No27.Remove Element
  6. 结合电商支付业务一文搞懂DDD
  7. 我与Python网络爬虫的第一次接触
  8. matlab里数组的赋值,arrays – MATLAB结构赋值数组
  9. 7 centos 时钟跟物理机同步_centos7上使用chrony自动同步时间
  10. iOS中copy,retain,strong,assign,weak的区别以及使用
  11. 数据结构与算法(Python)第三天
  12. jQuery报错:Uncaught ReferenceError: $ is not defined
  13. 阿里云Link Security为企业级区块链提供易用性安全解决方案
  14. GBK编码转换及Md5算法工具
  15. 玩转Light Blue之添加设备信息
  16. 或非门sr锁存器_d锁存器与sr锁存器的区别
  17. 【爬虫实战】自制属于你自己的在线翻译程序 - 爬取 360 在线翻译(教学 + 实践)
  18. 关于浏览器自动转https
  19. ElementUI之el-pagination样式修改(小三角、“前往”、页码数)
  20. 我的北京生活,2018面向新的开始

热门文章

  1. Spring Cloud(四) API网关Zuul
  2. c语言二元运算符大全,C语言运算符大全
  3. spring boot 切换 oracle 和 mysql_spring-boot多数据源动态切换
  4. mysql 2进制 安装_mysql二进制安装
  5. ui设计和python哪个容易学_软件开发和ui设计那个容易学?
  6. mysql最常用的索引_mysql常用索引
  7. 打破 Serverless 落地边界,阿里云 SAE 发布 5 大新特性
  8. Arthas | 定位线上 Dubbo 线程池满异常
  9. Knative Serving 进阶: Knative Serving SDK
  10. 如何让qtableview根据行列的宽度调整大小_T-200热熔打包机,打包宽度调整步骤