线程安全、简单的单例编写

news/2024/8/26 16:06:30

单例的特性:一、构造方法私有;二、 定义SingleInstance 类型属性

一、不安全的单例


public class SingleInstance
{
    private static SingleInstanceinstance = null;

    public static SingleInstance instance
    {
        get
        {
            if (instance == null)
            {
                instance = new SingleInstance();
            }
            return instance;
        }
    }
}

这个在多线程的时候if会同时成立,new 两个单例。

二、线程安全的 

public sealed class SingleInstance
   {
       public static readonly SingleInstance instance = new SingleInstance();
       static SingleInstance() { }
       private SingleInstance() { }//构造函数默认==私有
       public static SingleInstance Instance
       {
           get { return instance; }
       }
   }

 这个instance 并不会在程序启动new一个,也是第一次访问Instance变量时会执行初始化操作。也可以如下写:

public sealed class SingleInstance
   {
       privete static readonly SingleInstance instance ;
       static SingleInstance() {
          instance=new SingleInstance ();
       }
       private SingleInstance() { }//构造函数默认==私有
       public static SingleInstance Instance
       {
           get { return instance; }
       }
   }

区别: 前者调用的时候顺序是私有构造--->静态构造--->单例get;后者调用静态构造--->私有构造--->单例get

注意:

静态构造函数:只能有一个,无参数的,程序无法调用 。同样是由CLR保证,在程序第一次使用该类之前被调用,而且只调用一次,同静态变量一样。


http://www.niftyadmin.cn/n/4353417.html

相关文章

c# Task启动带参数和返回值的方法

Task启动带参数 Task.Run(() > test("123"));public void Test(string s){...todo.. } Task启动带参数和返回值的方法 var s Task.Run(() > isTest("ss"));var t s.Result;private bool isTest(string isno) {return true;}

Window Server IIS日志查看

安装Log Parser https://www.microsoft.com/en-us/download/details.aspx?id24659 打开log LogParser.exe -i:IISW3C -o:DATAGRID "SELECT c-ip,cs-method,s-port,cs-uri-stem,sc-status,sc-win32-status,sc-bytes,cs-bytes,time-taken FROM D:\Log\u_ex130615.log&qu…

Window Server IIS日志导入到SQL Server查看

配置ODBC log日志可以导出到提供ODBC访问接口的数据库查看 控制面板-ODBC 添加DSN->SQL Server 起个名称(随意命名) 下一步:选择数据库 下一步:默认就行 点完成 测试数据源 点击确定 点击应用-确定 打开logparser 输入&#…

Window Server IIS日志导入到SQL Server查看之时间转换

根据https://blog.csdn.net/yeluo_vinager/article/details/106147019 日志导入到SQLServer 以后时间是UTC格式 而且日期和时间分开了,导出到SQLSERVER时,会生成二个字段 把UTC时间换成本地时区的时间 有两个方式 一、SQL Server sql语句转换 alter…

Action和Func的使用

Action和Func两者的区别在于Action没有返回值&#xff0c;而Func有返回值。 在调用 Func<int,bool>XXX时,只需要传入一个int型参数即可&#xff0c;它将会返回一个bool类型的值。即Func尖括号内最后一个类型代表该Func的返回类型。

Nssm 安装Window服务

环境&#xff1a;Wind10 1、下载nssm.exe 官网&#xff1a;http://nssm.cc/download 2、解压 根据操作系统选择32位或64位nssm&#xff0c;在该目录启动命令行窗口 3、服务注册 命令行输入&#xff1a; nssm.exe install XX或者nssm install XX Path就是exe的路径&#x…

Nginx 流媒体服务器拉流

拉流&#xff1a; 下载VLC https://www.videolan.org/ 安装打开 拉流 输入url&#xff0c;即可。 根据https://blog.csdn.net/yeluo_vinager/article/details/98215270 url 可以填写rtmp://127.0.0.1/live/home 监听&#xff1a; 然后我们在浏览器中输入http://127.0.0.1/…

FLO 文件处理方式

import codecsfind_s "控股集团董事长" alter_s "项目公司总经理" f codecs.open("城投-定标管理.flo","rb") f_new open("城投-定标管理.flo.bak","wb") for line in f.readlines():if find_s.encode(utf_16…