原创多线程测试

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace MultipleTread
{
    class Program
    {
        static void Main(string[] args)
        {
            Thread thread1 = new Thread(new ParameterizedThreadStart(test));
            Thread thread2 = new Thread(new ParameterizedThreadStart(test));
            thread1.Start("lliu");
            thread2.Start("qi");
            Console.ReadKey();
        }

        public static void test(object UserName)
        {
            NedisClient client1 = NedisClient.Connect(new Person() { UserName= UserName.ToString(), PassWord="liu"});
            Console.WriteLine(client1.UserName);
            Thread.Sleep(1000);
            Console.WriteLine(client1.UserName);
            //NedisClient client2 = NedisClient.Connect(new Person() { UserName = UserName.ToString(), PassWord = "qi" });
            //Console.WriteLine(client1.UserName);
            //Console.WriteLine(client1 == client2);
            //Console.WriteLine(client1.UserName + " => " + client2.UserName);
            //client1.ForceRedisFailover();
        }
    }

    class NedisClient: IDisposable
    {
        public string UserName { get; set; }
        public string PassWord { get; set; }

    
        public static NedisClient Connect(Person configuration)
        {
            return ConnectImpl(() => CreateMultiplexer(configuration));
        }

        private static NedisClient CreateMultiplexer(Person configuration)
        {
            
            return new NedisClient(configuration);
        }

        private NedisClient(Person configuration)
        {
            this.UserName = configuration.UserName;
            this.PassWord = configuration.PassWord;

        }


        private static NedisClient ConnectImpl(Func<NedisClient> multiplexerFactory)
        {
            IDisposable killMe = null;
            try
            {
                var muxer = multiplexerFactory();
                killMe = muxer;
                killMe = null;
                return muxer;
            }
            finally
            {
                if (killMe != null) try { killMe.Dispose(); } catch { }
            }
        }

        /// <summary>
        /// 故障转移操作锁  加static和不加static有质的区别
        /// </summary>
        private static readonly object forceFailoverLocker = new object();

        
        /// <summary>
        ///  强制进行故障转移
        /// </summary>
        /// <param name="masterName"></param>
        public void ForceRedisFailover()
        {
            // 同时只进行一个强制故障转移
            lock (forceFailoverLocker)
            {
                Console.WriteLine("b");
                Thread.Sleep(1000);
                Console.WriteLine("e");
            }
        }

        public void Dispose()
        {
            throw new NotImplementedException();
        }
    }
    public class Person
    {
        public string UserName { get; set; }
        public string PassWord { get; set; }
    }

}

  

猜你喜欢

转载自www.cnblogs.com/liuqiyun/p/9104685.html