zoukankan      html  css  js  c++  java
  • 单例模式

    三种实现单例的方式

    主测试代码:

    class Program
        {
            static void Main(string[] args)
            {
                for (int i = 0; i < 10; i++)
                {
                    Task task = Task.Factory.StartNew(() =>
                    {
                        //Single s = Single.CreateSingle();
                        //Single_2 s = Single_2.CreateSingle();
                        Single_3 s = Single_3.instance;
                        s.Say();
                    });
                }
                Console.ReadKey();
            }
        }

    第一种:

    /// <summary>
        /// 简单写法:会出现线程安全问题
        /// </summary>
        public class Single
        {
            private static Single _single = null;
            static object obj = new object();
            private Single()
            {
    
            }
    
            public static Single CreateSingle()
            {
                if (_single==null)
                {
                    Console.WriteLine("对象被初始化--{0}",System.Threading.Thread.CurrentThread.ManagedThreadId);
                    _single = new Single();
                }
                return _single;
            }
    
            public void Say()
            {
                Console.WriteLine("执行say方法--{0}", System.Threading.Thread.CurrentThread.ManagedThreadId);
            }
        }
    View Code

    第二种:

    /// <summary>
        /// 安全写法,加入锁
        /// </summary>
        public class Single_2
        {
            private static Single_2 _single = null;
            static object obj = new object();
            private Single_2()
            {
    
            }
    
            public static Single_2 CreateSingle()
            {
                if (_single == null)
                {
                    lock (obj)
                    {
                        if (_single == null)
                        {
                            Console.WriteLine("对象被初始化--{0}", System.Threading.Thread.CurrentThread.ManagedThreadId);
                            _single = new Single_2();
                        }
                    }
                }
                return _single;
            }
    
            public void Say()
            {
                Console.WriteLine("执行say方法--{0}", System.Threading.Thread.CurrentThread.ManagedThreadId);
            }
        }
    View Code

    第三种:

    /// <summary>
        /// 精简写法
        /// </summary>
        public class Single_3
        {
            public static readonly Single_3 instance = new Single_3();
            private Single_3()
            {
                Console.WriteLine("对象被初始化--{0}", System.Threading.Thread.CurrentThread.ManagedThreadId);
            }
            public void Say()
            {
                Console.WriteLine("执行say方法--{0}", System.Threading.Thread.CurrentThread.ManagedThreadId);
            }
        }
    View Code
  • 相关阅读:
    【学习笔记】Hibernate关联映射(Y2-1-6)
    百度搜索排名API接口返回JSON数据格式
    HtmlAgilityPack 属性获取
    HtmlAgilityPack
    HighCharts实现双Y轴
    QQ在线客服配置
    项目管理者必知:适用于仪表盘项目的7个优秀JavaScript库
    极简Node教程-七天从小白变大神(二:中间件是核心)
    极简Node教程-七天从小白变大神(一:你需要Express)
    CSS滚动插件
  • 原文地址:https://www.cnblogs.com/zhuyapeng/p/7062166.html
Copyright © 2011-2022 走看看