Use static initilization to implement thread safe singleton.

public sealed class SingleTon
    {
        #region Singleton
        static readonly SingleTon instance = new SingleTon();
        static string path;
        private static object syncObject = new object();

        //static SingleTon()
        //{

        //}

        private SingleTon()
        {
            Init();
        }

        public static SingleTon Instance
        {
            get
            {
                return instance;
            }
        }

        #endregion

        private void Init()
        {
            path = ConfigurationManager.AppSettings["LogFilePath"];
            Thread.Sleep(20000);
            Console.WriteLine(DateTime.Now.ToString() +  Thread.CurrentThread.Name+ " SingleTon Init");
        }
}

 

 

Test:

/// <summary>
        ///A test for Instance
        ///</summary>
        [TestMethod()]
        public void InstanceTest()
        {
            Console.WriteLine(DateTime.Now.ToString() + "InstanceTest start");
            Thread t1 = new Thread(new ThreadStart(InstanceTestMethod1));
            t1.Name = "t1";
            t1.Start();

            Thread.Sleep(1000);

            Thread t2= new Thread(new ThreadStart(InstanceTestMethod2));
            t2.Name = "t2";
            t2.Start();

            Thread.Sleep(40 * 1000);
            Console.WriteLine(DateTime.Now.ToString() + "InstanceTest end");
        }

        private void InstanceTestMethod1()
        {
            Console.WriteLine(DateTime.Now.ToString() + "InstanceTestMethod1 start");
            SingleTon actual = SingleTon.Instance;
            Console.WriteLine(DateTime.Now.ToString() + "InstanceTestMethod1 end");

            SingleTon actual2 = SingleTon.Instance;
            Console.WriteLine(DateTime.Now.ToString() + "InstanceTestMethod1 actual2 end");
        }

        private void InstanceTestMethod2()
        {
            Console.WriteLine(DateTime.Now.ToString() +"InstanceTestMethod2 start");
            SingleTon actual = SingleTon.Instance;

            Console.WriteLine(DateTime.Now.ToString() + "InstanceTestMethod2 end");
            SingleTon actual2 = SingleTon.Instance;
            Console.WriteLine(DateTime.Now.ToString() + "InstanceTestMethod2 actual2  end");
        }

posted on 2011-01-20 09:45  netfuns  阅读(135)  评论(0编辑  收藏  举报