C# 线程管理 abort join

多线程是在程序中经常用到的技术,线程的消亡一直是个问题,有时候明明干掉了线程,线程确还在工作这是为什么了?看代码

 Thread th = new Thread(new ThreadStart(ThreadWork));
            th.Start(); Thread.Sleep(1000);
            try
            {
                //干掉线程
                th.Abort();
                
                Console.WriteLine("线程的状态{0}", th.ThreadState.ToString());
                th.Start();
            }
            catch (Exception e)
            {
                
                Console.WriteLine(e.Message.ToString());
            }
          
          
             //Thread.Sleep(1000);

            th.Join();
            Thread.Sleep(1000);
            Console.WriteLine("线程的状态{0}", th.ThreadState.ToString());
            Console.ReadLine();
 static void ThreadWork()
        {
            for (int i = 0; i < 1000000; i++)
            {
                Console.WriteLine("执行了{0}次", i);
            }
        
        
        }

看执行结果:

获取当前运行状态时有个abort请求状态,这时候就会出现这个线程还没有干掉,他还会继续工作已断很短的时间,

我们把join放到abort下面看下什么结果

这里看到有join的配合 线程会安全的干掉,下面再加入我们想加的代码,做线程干掉后的操作

总结:线程abort时,需要一段很短的时间干掉,这段时间线程还属于存活阶段,所以,为了防止这类事情出现,加入Join一直等待线程终止。





你可能感兴趣的:(学习笔记)