c#線程池ThreadPool實例詳解


1. 如何查看線程池的最大線程數和最小線程數

        static void Main(string[] args)
        {
            Console.WriteLine("----------線程池開始,線程ID是{0}-----------------", Thread.CurrentThread.ManagedThreadId);

            int workthread;
            int iothread;

            ThreadPool.GetMaxThreads(out workthread, out iothread);
            Console.WriteLine("Max Work Thread:{0} Max I/O Thread:{1}",workthread,iothread);

            ThreadPool.GetMinThreads(out workthread, out iothread);
            Console.WriteLine("Mix Work Thread:{0} Mix I/O Thread:{1}", workthread, iothread);

            Console.WriteLine("----------線程池結束,線程ID是{0}-----------------", Thread.CurrentThread.ManagedThreadId);

            Console.Read();
        }


image

2. 如何設置線程池的最大線程數和最小線程數

        static void Main(string[] args)
        {
            Console.WriteLine("----------線程池開始,線程ID是{0}-----------------", Thread.CurrentThread.ManagedThreadId);

            int workthread = 8;
            int iothread = 8;

            ThreadPool.SetMaxThreads(workthread, iothread);
            Console.WriteLine("Max Work Thread:{0} Max I/O Thread:{1}",workthread,iothread);

            ThreadPool.SetMinThreads(workthread, iothread);
            Console.WriteLine("Mix Work Thread:{0} Mix I/O Thread:{1}", workthread, iothread);

            Console.WriteLine("----------線程池結束,線程ID是{0}-----------------", Thread.CurrentThread.ManagedThreadId);

            Console.Read();
        }


image


3. ThreadPool線程啟動

        static void Main(string[] args)
        {
            Console.WriteLine("----------線程池開始,線程ID是{0}-----------------", Thread.CurrentThread.ManagedThreadId);

            for (int i = 0; i < 5; i++)
            {
                string name = string.Format("ThreadPool_{0}", i);
                WaitCallback method = (t) => Program.TestThread(t.ToString());
                ThreadPool.QueueUserWorkItem(method,name);
            }

            Console.WriteLine("----------線程池結束,線程ID是{0}-----------------", Thread.CurrentThread.ManagedThreadId);

            Console.Read();
        }

        static void TestThread(string name)
        {
            Console.WriteLine("TestThread Start name:{0} 當前線程id:{1} 當前時間:{2}", name, Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString("yy-MM-dd hh:mm:ss.fff"));

            long sum = 0;

            for (int i = 0; i < 10000000; i++)
            {
                sum += i;
            }

            Console.WriteLine("TestThread End name:{0} 當前線程id:{1} 當前時間:{2}", name, Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString("yy-MM-dd hh:mm:ss.fff"));
        }


image


4. ThreadPool線程回收

ThreadPool線程池會自動回收。


5. ThreadPool線程池等待

可以通過ManualResetEvent信號量來實現,代碼如下:


6. ThreadPool返回值

沒有提供方法,可以自己定義,代碼如下:


7. ThreadPool回調方法

沒有提供方法,可以自己定義,代碼如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM