首页 > 代码库 > 线程系列05,手动结束线程

线程系列05,手动结束线程

有时候,我们希望手动结束一个线程。比如说,当客户端满足某种条件,让线程就此结束。如何设计呢?

 

线程间肯定要共享数据,假设把共享数据默认值设置成true,客户端线程在满足某种条件时把共享数据设置成false。而另外一个线程,如果共享数据一直是true,它就一直执行程序,直到共享数据为false,该线程就结束。

    class Program
    {
        private static bool cancel = false;
        static void Main(string[] args)
        {
            Thread t = new Thread(SayHello);
            t.Start();
            Console.WriteLine("按回车键取消");
            Console.ReadLine();
            cancel = true;
            t.Join();
            Console.WriteLine("结束了");
            Console.ReadKey();
        }
        static void SayHello()
        {
            while (!cancel)
            {
                Console.WriteLine("线程#" + Thread.CurrentThread.ManagedThreadId + "还活着,Hello~");
                Thread.Sleep(1000);
            }
        }       
    }

19

○ 2个线程共享类的静态字段
○ 当按回车键后,就把静态字段cancel设置成false
○ 当把cancel设置成false后,就不满足线程t的循环条件,线程t结束循环
○ t.Join()方法保证线程t执行完后,再执行客户端线程

 

线程系列包括:

线程系列01,前台线程,后台线程,线程同步

线程系列02,多个线程同时处理一个耗时较长的任务以节省时间

线程系列03,多线程共享数据,多线程不共享数据

线程系列04,传递数据给线程,线程命名,线程异常处理,线程池

线程系列05,手动结束线程

线程系列05,手动结束线程