线程系列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,无需显式调用线程的情形

转载于:https://www.cnblogs.com/darrenji/p/3984277.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值