说明

采用加锁的方式,实现容易出错,效率也收到影响。

所以考虑使用.Net的特性, 即: C#在调用静态构造函数时,初始化静态变量,.net可以保证只调用一次静态构造函数。从而保证只初始化一次实例instance。

同时考虑到不过早的创建实例,实现按需创建实例,所以使用嵌套类,在类中再定义一个私有类型Nested,在该私有类型中调用它的静态构造函数创建实例instance。

代码

不使用锁保证多线程安全

    public sealed class Singleton5{Singleton5(){Console.WriteLine("An instance of Singleton5 is created.");}public static Singleton5 Instance{get{return Nested.instance;}}class Nested{static Nested(){}internal static readonly Singleton5 instance = new Singleton5();}}

加锁的方式

    public sealed class Singleton3{private Singleton3(){}private static object syncObj = new object();private static Singleton3 instance = null;public static Singleton3 Instance{get{if (instance == null) //此句判断放在lock前,为了避免每次都去抢锁,耗费时间{lock (syncObj){if (instance == null) //此处不能省,假设2个线程同时进入a的位置,第一个线程创建完成后,释放锁,第二个线程拿到锁,此时不判断==null,会再new一个新的对象出来。instance = new Singleton3();}}return instance;}}}

参考:剑指offer 第二版 面试题2

设计模式_单例模式回顾_C#版不使用锁保证多线程安全相关推荐

  1. java_设计模式_单例模式_

    目录 引言 一.概述 1.概念: 2.单例模式有 3 个特点: 3.单例模式的优点和缺点: 单例模式的优点: 单例模式的缺点: 单例模式的应用场景: 单例模式的结构: 二.单例模式的实现 1.饿汉式单 ...

  2. 当Kotlin完美邂逅设计模式之单例模式(一)

    简述: 从这篇文章开始,我将带领大家一起来探讨一下Kotlin眼中的设计模式.说下为什么想着要开始这么一个系列文章.主要基于下面几点原因: 1.设计模式一直是开发者看懂Android源码的一个很大障碍 ...

  3. 字符串全排列算法_C#版_剑指OFFER

    字符串全排列算法_C#版_剑指OFFER 题目描述 ​题目描述 输入一个长度为 n 字符串,打印出该字符串中字符的所有排列,你可以以任意顺序返回这个字符串数组. 例如输入字符串ABC,则输出由字符A, ...

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

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

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

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

  6. 实践GoF的设计模式:单例模式

    本文分享自华为云社区<[Go实现]实践GoF的23种设计模式:单例模式>,作者: 元闰子. 简述 GoF 对单例模式(Singleton)的定义如下: Ensure a class onl ...

  7. 初学Java常用设计模式之——单例模式

    0. 常⻅的三⼤设计模式分类 创建型模式:提供了⼀种在创建对象的同时隐藏创建逻辑的⽅式,使 得程序在判断针对某个给定实例需要创建哪些对象时更 加灵活,比如: 常用4个:⼯⼚模式.抽象⼯⼚模式.单例模式 ...

  8. 《设计模式解析(第2版•修订版)》目录—导读

    作者简介 设计模式解析(第2版•修订版) Alan Shalloway 美国Net Objectives咨询/培训公司的创始人和CEO.他是麻省理工学院的计算机科学硕士,具有30多年面向对象咨询.培训 ...

  9. linux命令后缀-d和 都表示后台启动,Linux复习材料_关宇亮整理版.doc

    Linux复习材料_关宇亮整理版 Linux目录 第1章1.Linux的内核版与发行版的区别2.2个开发标准规范 4.常见的Linux发行版 5.Unix与Linux的关系与区别 6.Linux的特性 ...

  10. C#设计模式(1)——单例模式

    原文地址:http://www.cnblogs.com/zhili/p/SingletonPatterm.html 一.引言 最近在设计模式的一些内容,主要的参考书籍是<Head First 设 ...

最新文章

  1. 【神经网络】(2) 网络优化,案例:服装图像分类,附python完整代码
  2. 蓝盾第三代AI防火墙分析
  3. EditPlus 3.5 版已经发布
  4. django 在保存数据前进行数据校验
  5. 一个servlet跳到另一个servlet_另一个太阳下的天与地
  6. SAP Fiori gateway OData开发重要的tcode SEGW背后的数据库表
  7. oracle 游标 904,如何解决Oracle数据库游标连接超出问题
  8. H.264编解码流程
  9. 【Todo】RTP/RTCP/RTSP/SIP/SDP 等多媒体传输和会话协议
  10. wordpress主题安装
  11. 网络安全与渗透测试工具集合
  12. python apply_async执行不了_python – Django Celery apply_async不起作用
  13. 大数据_MapperReduce_Hbase的优化_存数据_自动计算分区号 自动计算分区键---Hbase工作笔记0027
  14. bootstrap-datepicker 开始时间-结束时间 thinkphp
  15. R语言-解决for modifying Try removing ‘00LOCK’的问题
  16. java铁三公路自行车_公路车、计时车、铁三车,到底都是什么鬼?
  17. MySQL导入Excel表格
  18. 报错:<ly-tab> - did you register the component correctly? For recursive components, make sure to provi
  19. 微信刷脸支付php后端,2.1 微信刷脸支付初始化
  20. 各大IT公司校园招聘程序猿笔试、面试题集锦

热门文章

  1. 前端面试宝典(3)——其他
  2. Binwalk 后门(固件)分析利器
  3. MySQL学习之一数据库简介
  4. 【BearChild】
  5. 代码管理仓库项目任务计划
  6. 新手在前期应该怎样发“外链”(4)之终级外链法
  7. 转换整形数字为16进制字符串
  8. moss 自定义文档库文档图标
  9. mybatis 主从表关联查询封装返回结果
  10. 启动mongodb服务时报错100