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

    ============1单例模式==============

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Text;

    using System.Threading;

    namespace ConsoleApplication13

    {

        class Program

        {

            static void Main(string[] args)

            {

                for (int i = 0; i < 1000; i++)

                {

                    Thread t = new Thread(new ThreadStart(() =>

                    {

                        Singleton s = Singleton.GetInstance();

                    }));

                    t.Start();

                }

                Console.WriteLine("ok");

                Console.ReadKey();

            }

        }

        public class Singleton

        {

            private Singleton()

            {

                //只要输出一次.就证明创建了一个对象。

                Console.WriteLine(" . ");

            }

            private static Singleton _instance;

            private static readonly object _syn = new object();

            public static Singleton GetInstance()

            {

                //每次都锁定降低性能,所以只有为空值时才锁定。

                if (_instance == null)

                {

                    lock (_syn)

                    {

                        //为了防止在第一次判断_instance==null后,在锁定之前_instance又被赋值,所以锁定之后一定要再判断一次是否已经创建了对象。

                        if (_instance == null)

                        {

                            _instance = new Singleton();

                        }

                    }

                }

                return _instance;

            }

        }

    }

    =============================2单例模式(另一种写法)==========================

     public sealed class Singleton2

        {

            private Singleton2()

            {

                Console.WriteLine(".");

            }

            //静态成员初始化,只在第一次使用的时候初始化一次。

            private static readonly Singleton2 _instance = new Singleton2();

            public static Singleton2 GetInstance()

            {

                return _instance;

            }

        }

    =================测试====================

      for (int i = 0; i < 1000; i++)

                {

                    Thread t = new Thread(new ThreadStart(() =>

                    {

                        Singleton2 s = Singleton2.GetInstance();

                    }));

                    t.Start();

                }

                Console.WriteLine("ok");

                Console.ReadKey();

    //======================实现窗口类(Form)的单例模式===============

    public partial class Form2 : Form

        {

            private Form2()

            {

                InitializeComponent();

            }

            private static Form2 f2;

            private static readonly object syn = new object();

            public static Form2 GetForm2()

            {

                if (f2 == null || f2.IsDisposed)

                {

                    lock (syn)

                    {

                        if (f2 == null || f2.IsDisposed)

                        {

                            f2 = new Form2();

                        }

                    }

                   

                }

                return f2;

            }

        }

  • 相关阅读:
    如何用一句话激怒设计师
    Kubernetes1.3:POD生命周期管理
    从零学React Native之11 TextInput
    从零学React Native之10Text
    html+js 在页面同步服务器时间
    电信行业的容器化改造之道
    容器化ICT融合初体验
    Laravel 发送邮件(最简单的讲解!)
    jquery( 点击按钮出来文本框并限制文本框的个数)
    OpenStack宣布用Kubernetes重写底层编排引擎
  • 原文地址:https://www.cnblogs.com/luwei-s/p/4534342.html
Copyright © 2011-2022 走看看