当前位置: 首页 > news >正文

单例模式,加锁

单例模式

namespace 单例模式
{internal class DanLi{int num = 100;static DanLi d1=null;int v;private DanLi() { }public static DanLi Create() {if (d1==null ){d1 = new DanLi();}return d1 ; }public  int M() { return --num; }public  int k() { return ++num; }}
namespace 单例模式
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){//Class1 c1=new Class1();         //textBox1.Text=c1.jai();DanLi d = DanLi.Create();textBox1.Text = d.M().ToString();}private void button2_Click(object sender, EventArgs e){//Class2 c2 = new Class2();//textBox1.Text = c2.jian();DanLi d = DanLi.Create();textBox1.Text=d.M().ToString();}}

加锁

namespace _4.线程同步Lock
{internal class Danli{// 按照上节课 单例模式来说 在单线程上使用是完全没有没有问题的// 但是在多线程的情况下 会出现多个Danli的实例  因为在多个线程同时运行时// 调用GetDanli方法 此时两个线程执行判断时(dl==null) 这和条件有可能都返回真 就会创建两个danli 这样就违背了单例模式//对于上面这种情况 我们可以使用lock  同一时间只执行一个private static Danli dl;private Danli() { }//多线程场景//定一个表示符  确保线程同步      private static readonly object locker = new object();//设置一个供外部访问的全局点public static Danli GetDl{get{//当第一个线程运行到这里是 此会对locker对象进行加锁// 当第二个线程运行此方法时 lock首先会检测locker的"加锁"状态 该县就会被挂起等待//等待到lock语句运行完毕解锁lock (locker){if (dl == null){dl = new Danli();}return dl;}}}//双重锁定public static Danli GetDl1(){if (dl ==null){lock(locker){if (dl ==null){dl =new Danli();}}}return dl;}int i = 0;public int _i{get{return i;}set{i = value;}}}class Test1{public void Get(){Danli d1 = Danli.GetDl;d1._i = 100;Console.WriteLine("这是T1访问dl的i值" + d1._i);}}class Test2{public void Get(){Danli d2 = Danli.GetDl;Console.WriteLine("这是T2访问Dl的i值" + d2._i);}}}
namespace _4.线程同步Lock
{public partial class Form1 : Form{public Form1(){InitializeComponent();}Thread T1;Thread T2;private void Form1_Load(object sender, EventArgs e){//多线程场景T1 = new Thread(() =>{Test1 t1 = new Test1();t1.Get();});T1.IsBackground = true;T2 = new Thread(() =>{Test2 t2 = new Test2();t2.Get();});T2.IsBackground = true;T1.Start();T2.Start();}}
}


文章转载自:

http://andAb3gu.wrcym.cn
http://A6HvCHFQ.wrcym.cn
http://17stvWv2.wrcym.cn
http://KzLWZYhT.wrcym.cn
http://UL0S3n1n.wrcym.cn
http://qOCuQ9sd.wrcym.cn
http://PFARDrWh.wrcym.cn
http://ZVEJRZUV.wrcym.cn
http://ugXVtfT8.wrcym.cn
http://fVJS6Uqz.wrcym.cn
http://i9aYghF4.wrcym.cn
http://xY9GJrOa.wrcym.cn
http://aIKzHK78.wrcym.cn
http://I33b18f0.wrcym.cn
http://6PWdbrxn.wrcym.cn
http://Uc4wssKb.wrcym.cn
http://Az4xhurb.wrcym.cn
http://nmndHbrO.wrcym.cn
http://An5lejYk.wrcym.cn
http://5sdAVhGi.wrcym.cn
http://Pjzeow2D.wrcym.cn
http://jvL4N9Fc.wrcym.cn
http://nRMHfzZI.wrcym.cn
http://J7DJZ5LP.wrcym.cn
http://WiBdCZOt.wrcym.cn
http://kko3qgvr.wrcym.cn
http://NT5QaT0t.wrcym.cn
http://t2rrZSw0.wrcym.cn
http://MSj30WoQ.wrcym.cn
http://34Z9ZHW5.wrcym.cn
http://www.dtcms.com/a/385073.html

相关文章:

  • CV论文速递 | 13篇前沿论文精选:生成与处理、3D视觉、医学影像等核心方向(09.08-09.12)
  • Linux系统部分——冯诺依曼体系结构
  • 给图片url添加时间戳参数以防止缓存、清缓存
  • 硬件 - NSG2000 - NMOS代替继电器方案
  • ssh 故障排查和免密登陆
  • exists和in的区别及适用场景
  • 基于单片机的客车综合报警系统(论文+源码)
  • 积极践行“人工智能+”行动,山东大学数字人文教科研一体平台完成 AI 化升级
  • 晨曦中,它已劳作:一台有温度的机器人如何重塑我们的洁净日常
  • 易语言中判断函数中可空参数不为空?
  • 2025机器人打磨抛光设备推荐及汽车零件/铸件打磨机器人技术解析
  • ESP32三种主流的开发环境
  • GTPU涉及NR RAN 容器
  • 【数值分析】02-绪论-误差
  • 使用 Playwright 打开 Edge 浏览器的两种方法
  • 刷题日记0915
  • 路由器设置内网端口映射到外网访问详细步骤图解教程,附无公网ip端口映射工具方法
  • AIOps概述:Langfuse、Opik、KeepHQ、LangSmith
  • 使用idea启动一个新的项目的步骤
  • Spring 框架从入门到精通(第三篇)——Spring 整合 MyBatis、声明式事务与注解总结
  • Java:使用spring-cloud-gateway的应用报DnsNameResolverTimeoutException原因和解决方法
  • 【ARM-day06-KEY实验-中断】
  • 实战优化!多智能体React模式:层级指挥的黄金法则​
  • 容器逃逸漏洞
  • 石头科技出海升级:全球电商业财一体化与OMS实践
  • (二)文件管理-文件权限-chmod命令的使用
  • 使用 cAdvisor 监控容器
  • MongoDB 删除集合
  • 【C++】C++中内存管理的利器“智能指针”
  • C++——高并发内存池设计(一)