博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity3d游戏开发之-单例设计模式-多线程一
阅读量:6434 次
发布时间:2019-06-23

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

单例模式3:

多线程一

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 单例设计模式写法{    ///     /// 单例模式二:多线程一    ///     public class Singleton                                            //1:定义一个public的类    {        private static Singleton instance;                            //2:定义一个私有的静态变量来保持类的实例        private static readonly object locker = new object();        //3:定义一个标示确保线程同步        private Singleton() { }                                       //4:定义一个私有的静态构造函数,使外界不能访问        public static Singleton Instance()                            //5:定义一个public静态的方法,提供一个全局访问点,同时也可以定义共有属性来提供全局访问点        {            //6:当第一个程序运行到这里时,此时会对locker对象“加锁”            // ·当第二个线程运行该方法时,首先检测locker对象为“加锁”状态,该线程就会挂起等待第一个线程“解锁”            // ·lock语句运行完之后(即线程运行完之后)会对该对象“解锁”            lock (locker)            {                if (instance == null)                                //7:判断类的实例是否存在,或者为空                {                    instance = new Singleton();                       //8:如果类的实例不存在则创建一个                }            }            return instance;                                         //9:如果类的实例存在,直接返回        }        /*【多线程 说明:】        上面这种解决方案确实可以解决多线程的问题,        但是上面代码对于每个线程都会对线程辅助对象locker加锁之后再判断实例是否存在,        对于这个操作完全没有必要的,因为当第一个线程创建了该类的实例之后,        后面的线程此时只需要直接判断(uniqueInstance==null)为假,        此时完全没必要对线程辅助对象加锁之后再去判断,所以上面的实现方式增加了额外的开销,        损失了性能,为了改进上面实现方式的缺陷,        我们只需要在lock语句前面加一句(uniqueInstance==null)的判断就可以避免锁所增加的额外开销,        这种实现方式我们就叫它 “双重锁定”,请看后面我的分享。        */    }}

转载地址:http://kehga.baihongyu.com/

你可能感兴趣的文章
9 Easy Steps for Successful Data Migration
查看>>
人工智能,不止于技术的革命--WOT2017全球创新技术峰会开幕
查看>>
mysql 在大型应用中的架构演变
查看>>
ibm系列文章 --> Windows 到 Linux 之旅
查看>>
linux内存占用过高原因
查看>>
全备份失败后,如何手工清除exchange日志文件,附微软KB
查看>>
java如何连接mysq之源码l讲解
查看>>
企业运维笔试考题(1)
查看>>
Mysql修改存储过程相关权限问题
查看>>
4.2权限管理
查看>>
彻底理解ThreadLocal
查看>>
AI看脸、测肤,左可美妆新零售,右能智慧医美
查看>>
MFC对话框弹出上下文菜单并响应命令
查看>>
用matplotlib获取雅虎股票数据并作图
查看>>
USB设备被识别流程【转】
查看>>
test
查看>>
跨入安全的殿堂--读《Web入侵安全测试与对策》感悟
查看>>
Python类及面向对象编程【转】
查看>>
spring boot(二):web综合开发
查看>>
DataGrid 功能实现收集(一)
查看>>