博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单例模式的四种实现
阅读量:6160 次
发布时间:2019-06-21

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

hot3.png

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace Test1{    class Program    {        static void Main(string[] args)        {            AppConfig.GetAppConfig();        }    }}//===============================================================================================
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace Test1{    public class AppConfig    {        //懒汉,单线程时的单例,        //线程不安全,即多个线程可同时访问,不能保证结果的二义性        private static AppConfig test1;        private AppConfig()        {            Console.WriteLine("我成功创建了一个AppConfig啦!");        }        public static AppConfig GetAppConfig()        {            if (test1 == null)            {                test1 = new AppConfig();            }            return test1;        }                //懒汉,多线程时的单例,        //线程安全,当一个线程位于代码的临界区时,另一个线程不进入临界区        //如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),        //直到该对象被释放。        //private static AppConfig test1;        //private static readonly object syncRoot = new object();        //private AppConfig()        //{        //    Console.WriteLine("我成功创建了一个AppConfig啦!");        //}        //public static AppConfig GetAppConfig()        //{        //    lock (syncRoot)        //    {        //        if (test1 == null)        //        {        //            test1 = new AppConfig();        //        }        //    }        //    return test1;        //}        //饿汉        //private static AppConfig test1 = new AppConfig();        //private AppConfig()        //{        //    Console.WriteLine("我成功创建了一个AppConfig啦!");        //}        //public static AppConfig GetAppConfig()        //{        //    return test1;        //}        //双重锁定        //private static AppConfig test1;        //private static readonly object syncRoot = new object();        //private AppConfig()        //{        //    Console.WriteLine("我成功创建了一个AppConfig啦!");        //}        //public static AppConfig GetAppConfig()        //{        //    //由于lock机制,必须其中的一个进入并出来之后,另一个才能进入,        //    //如果没有第二层,则第一个线程创建了实例,第二个线程还是可以        //    //创建新的实例,就不满足单例的目的        //    if (test1 == null)        //    {        //        lock (syncRoot)        //        {        //            if (test1 == null)        //            {        //                test1 = new AppConfig();        //            }        //        }        //    }        //    return test1;        //}    }}

 

转载于:https://my.oschina.net/CoderBleak/blog/673137

你可能感兴趣的文章
数据类型的一些方法
查看>>
Webpack 2 中一些常见的优化措施
查看>>
移动端响应式
查看>>
js中var、let、const的区别
查看>>
简洁优雅地实现夜间模式
查看>>
react学习总结
查看>>
在soapui上踩过的坑
查看>>
MySQL的字符集和字符编码笔记
查看>>
ntpd同步时间
查看>>
Maven编译时跳过Test
查看>>
Spring Boot 整合Spring Security 和Swagger2 遇到的问题小结
查看>>
Apache通过mod_php5支持PHP
查看>>
java学习:jdbc连接示例
查看>>
Silverlight 如何手动打包xap
查看>>
Javascript一些小细节
查看>>
禁用ViewState
查看>>
Android图片压缩(质量压缩和尺寸压缩)
查看>>
nilfs (a continuent snapshot file system) used with PostgreSQL
查看>>
【SICP练习】150 练习4.6
查看>>
HTTP缓存应用
查看>>