线程系列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,手动结束线程

线程系列06,通过CLR代码查看线程池及其线程

线程系列07,使用lock语句块或Interlocked类型方法保证自增变量的数据同步

线程系列08,实现线程锁的各种方式,使用lock,Montor,Mutex,Semaphore以及线程死锁

线程系列09,线程的等待、通知,以及手动控制线程数量

线程系列10,无需显式调用线程的情形

posted @ 2014-09-21 10:42  Darren Ji  阅读(906)  评论(0编辑  收藏  举报

我的公众号:新语新世界,欢迎关注。