ThreadPool的基本使用

 

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

namespace Test
{
    class Program
    {
        static void Main()
        {
            //Console.WriteLine("主线程Main()的线程Id:\t{0}", Thread.CurrentThread.ManagedThreadId);
            //Console.WriteLine("主线程Main()的线程状态:\t{0}", Thread.CurrentThread.ThreadState.ToString());
            //Console.WriteLine("主线程Main()的当前时间:\t{0} \n", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
            CurrentThreadInfo("主线程Main()的");


            ThreadPool.QueueUserWorkItem((object stat) => { Work1(); });

            //写法2
            ThreadPool.QueueUserWorkItem(new WaitCallback(delegate { Work2(); }));


            Console.ReadLine();
        }

        private static void Work1()
        {
            Console.WriteLine("Work1 run {");
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine("\tWork1 ***---{0}  {1}  线程Id:{2}",
                    i.ToString(), DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), Thread.CurrentThread.ManagedThreadId);
            }
            Console.WriteLine("end Work1 }");

            CurrentThreadInfo("Work1()的方法");
        }

        private static void Work2()
        {
            Console.WriteLine("Work2 run {");
            for (int i = 100; i < 110; i++)
            {
                Console.WriteLine("\tWork2 ###_{0}  {1}  线程Id:{2}",
                    i.ToString(), DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), Thread.CurrentThread.ManagedThreadId);
            }
            Console.WriteLine("end Work2 }");

            CurrentThreadInfo("Work2()的方法");
        }

        /// <summary>
        /// 当前线程信息
        /// </summary>
        private static void CurrentThreadInfo(string name)
        {
            StringBuilder builder = new StringBuilder();
            builder.AppendLine("");
            builder.AppendLine(String.Format("{0}线程Id:\t\t{1}", name, Thread.CurrentThread.ManagedThreadId));
            builder.AppendLine(String.Format("{0}是否使用线程池:\t{1}", name, Thread.CurrentThread.IsThreadPoolThread));
            builder.AppendLine(String.Format("{0}是否后台线程:\t{1}", name, Thread.CurrentThread.IsBackground));
            builder.AppendLine(String.Format("{0}线程状态:\t\t{1}", name, Thread.CurrentThread.ThreadState.ToString()));
            builder.AppendLine(String.Format("{0}当前时间:\t\t{1}", name, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")));
            builder.AppendLine("");

            Console.WriteLine(builder.ToString());
        }
    }
}

 

/*

主线程Main()的线程Id:           10
主线程Main()的是否使用线程池:    False
主线程Main()的是否后台线程:      False
主线程Main()的线程状态:         Running
主线程Main()的当前时间:         2016-07-28 23:04:42


Work1 run {
        Work1 ***---0  2016-07-28 23:04:42  线程Id:6
        Work1 ***---1  2016-07-28 23:04:42  线程Id:6
        Work1 ***---2  2016-07-28 23:04:42  线程Id:6
        Work1 ***---3  2016-07-28 23:04:42  线程Id:6
        Work1 ***---4  2016-07-28 23:04:42  线程Id:6
        Work1 ***---5  2016-07-28 23:04:42  线程Id:6
        Work1 ***---6  2016-07-28 23:04:42  线程Id:6
        Work1 ***---7  2016-07-28 23:04:42  线程Id:6
Work2 run {
        Work2 ###_100  2016-07-28 23:04:42  线程Id:12
        Work1 ***---8  2016-07-28 23:04:42  线程Id:6
        Work1 ***---9  2016-07-28 23:04:42  线程Id:6
end Work1 }
        Work2 ###_101  2016-07-28 23:04:42  线程Id:12
        Work2 ###_102  2016-07-28 23:04:42  线程Id:12
        Work2 ###_103  2016-07-28 23:04:42  线程Id:12
        Work2 ###_104  2016-07-28 23:04:42  线程Id:12
        Work2 ###_105  2016-07-28 23:04:42  线程Id:12
        Work2 ###_106  2016-07-28 23:04:42  线程Id:12
        Work2 ###_107  2016-07-28 23:04:42  线程Id:12
        Work2 ###_108  2016-07-28 23:04:42  线程Id:12
        Work2 ###_109  2016-07-28 23:04:42  线程Id:12
end Work2 }

Work1()的方法线程Id:            6
Work1()的方法是否使用线程池:     True
Work1()的方法是否后台线程:       True
Work1()的方法线程状态:          Background
Work1()的方法当前时间:          2016-07-28 23:04:42



Work2()的方法线程Id:           12
Work2()的方法是否使用线程池:    True
Work2()的方法是否后台线程:      True
Work2()的方法线程状态:          Background
Work2()的方法当前时间:          2016-07-28 23:04:42

*/

 

 

总结:

ThreadPool 使用的是线程池后台线程。

Work1()、Work2()两个方法是并行执行,但是方法内部的代码是顺序执行。

 

posted @ 2016-07-28 23:09  茗::流  阅读(451)  评论(1)    收藏  举报
如有雷同,纯属参考。如有侵犯你的版权,请联系我。