设计模式_单例模式回顾_C#版不使用锁保证多线程安全
说明
采用加锁的方式,实现容易出错,效率也收到影响。
所以考虑使用.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#版不使用锁保证多线程安全相关推荐
- java_设计模式_单例模式_
目录 引言 一.概述 1.概念: 2.单例模式有 3 个特点: 3.单例模式的优点和缺点: 单例模式的优点: 单例模式的缺点: 单例模式的应用场景: 单例模式的结构: 二.单例模式的实现 1.饿汉式单 ...
- 当Kotlin完美邂逅设计模式之单例模式(一)
简述: 从这篇文章开始,我将带领大家一起来探讨一下Kotlin眼中的设计模式.说下为什么想着要开始这么一个系列文章.主要基于下面几点原因: 1.设计模式一直是开发者看懂Android源码的一个很大障碍 ...
- 字符串全排列算法_C#版_剑指OFFER
字符串全排列算法_C#版_剑指OFFER 题目描述 题目描述 输入一个长度为 n 字符串,打印出该字符串中字符的所有排列,你可以以任意顺序返回这个字符串数组. 例如输入字符串ABC,则输出由字符A, ...
- socket可以写成单例嘛_精读《设计模式 - Singleton 单例模式》
Singleton(单例模式) Singleton(单例模式)属于创建型模式,提供一种对象获取方式,保证在一定范围内是唯一的. 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 其实单例模 ...
- socket可以写成单例嘛_精读设计模式 Singleton 单例模式
Singleton(单例模式) Singleton(单例模式)属于创建型模式,提供一种对象获取方式,保证在一定范围内是唯一的. 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 其实单例模 ...
- 实践GoF的设计模式:单例模式
本文分享自华为云社区<[Go实现]实践GoF的23种设计模式:单例模式>,作者: 元闰子. 简述 GoF 对单例模式(Singleton)的定义如下: Ensure a class onl ...
- 初学Java常用设计模式之——单例模式
0. 常⻅的三⼤设计模式分类 创建型模式:提供了⼀种在创建对象的同时隐藏创建逻辑的⽅式,使 得程序在判断针对某个给定实例需要创建哪些对象时更 加灵活,比如: 常用4个:⼯⼚模式.抽象⼯⼚模式.单例模式 ...
- 《设计模式解析(第2版•修订版)》目录—导读
作者简介 设计模式解析(第2版•修订版) Alan Shalloway 美国Net Objectives咨询/培训公司的创始人和CEO.他是麻省理工学院的计算机科学硕士,具有30多年面向对象咨询.培训 ...
- linux命令后缀-d和 都表示后台启动,Linux复习材料_关宇亮整理版.doc
Linux复习材料_关宇亮整理版 Linux目录 第1章1.Linux的内核版与发行版的区别2.2个开发标准规范 4.常见的Linux发行版 5.Unix与Linux的关系与区别 6.Linux的特性 ...
- C#设计模式(1)——单例模式
原文地址:http://www.cnblogs.com/zhili/p/SingletonPatterm.html 一.引言 最近在设计模式的一些内容,主要的参考书籍是<Head First 设 ...
最新文章
- 【神经网络】(2) 网络优化,案例:服装图像分类,附python完整代码
- 蓝盾第三代AI防火墙分析
- EditPlus 3.5 版已经发布
- django 在保存数据前进行数据校验
- 一个servlet跳到另一个servlet_另一个太阳下的天与地
- SAP Fiori gateway OData开发重要的tcode SEGW背后的数据库表
- oracle 游标 904,如何解决Oracle数据库游标连接超出问题
- H.264编解码流程
- 【Todo】RTP/RTCP/RTSP/SIP/SDP 等多媒体传输和会话协议
- wordpress主题安装
- 网络安全与渗透测试工具集合
- python apply_async执行不了_python – Django Celery apply_async不起作用
- 大数据_MapperReduce_Hbase的优化_存数据_自动计算分区号 自动计算分区键---Hbase工作笔记0027
- bootstrap-datepicker 开始时间-结束时间 thinkphp
- R语言-解决for modifying Try removing ‘00LOCK’的问题
- java铁三公路自行车_公路车、计时车、铁三车,到底都是什么鬼?
- MySQL导入Excel表格
- 报错:<ly-tab> - did you register the component correctly? For recursive components, make sure to provi
- 微信刷脸支付php后端,2.1 微信刷脸支付初始化
- 各大IT公司校园招聘程序猿笔试、面试题集锦