C#多线程编程笔记-检测线程状态State

近来在学习Eugene Agafonov编写的《C#多线程编程实战》(译),做些笔记也顺便分享一下^-^

using System;
using System.Threading;

namespace 检测线程状态
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Starting program...");
            Thread t = new Thread(PrintNumbersWithStatus);
            Thread t2 = new Thread(DoNothing);
            Console.WriteLine(t.ThreadState.ToString());
            t2.Start();
            t.Start();
            for (int i = 1; i < 30; i++)
            {
                Console.WriteLine(t.ThreadState.ToString());
            }
            Thread.Sleep(TimeSpan.FromSeconds(6));
            t.Abort();
            Console.WriteLine("A thread has been aborted");
            Console.WriteLine(t.ThreadState.ToString());
            Console.WriteLine(t2.ThreadState.ToString());
            Console.ReadKey();
        }

        static void DoNothing()
        {
            Thread.Sleep(TimeSpan.FromSeconds(2));//阻塞2秒
        }

        static void PrintNumbersWithStatus()
        {
            Console.WriteLine("Starting...");
            //显示当前线程的状态
            Console.WriteLine(Thread.CurrentThread.ThreadState.ToString());
            for (int i = 1; i < 10; i++)
            {
                Thread.Sleep(TimeSpan.FromSeconds(2));
                Console.WriteLine(i);
            }
        }
    }
}

线程状态位于Thread对象的ThreadState属性中,是一个枚举对象。刚开始的线程状态为ThreadState.Unstarted。然后我们启动线程,并估计在一个周期为30次迭代的区间中,线程状态会从ThreadState.Running变为ThreadState.WaitSleepJoin。

终止第一个线程后,会看到该线程的状态为ThreadState.Aborted,在程序的最后t2线程成功完成且状态为ThreadState.Stopped。这些都是线程状态的一些实例,可以让大家更清楚的认识到线程状态具体的变化。不过需要注意的是,不要在程序中使用线程终止,会造成无法预计的错误,这里使用只是为了展示相应的线程状态!

猜你喜欢

转载自blog.csdn.net/qq_35445058/article/details/80702683