线程会消耗大量的操作系统资源,多个线程共享一个物理处理器将导致操作系统忙于管理这些线程,而无法运行程序。
1:暂停线程
使用Thread.Sleep()使线程进入休眠状态,它会占用尽可能少的cpu,而不浪费系统资源。
2:线程等待
Thread.Sleep()需要指定具体的休眠时间,当一个线程需要等待另一个线程执行完成再进行某些操作时,就需要用到Thread.Join()方法。该方法可以实现在两个线程间同步执行,第一个线程会等待另一个线程完成后再继续执行,第一个线程等待时是处于阻塞状态。
示例代码:static void Main()
{
Thread t=new Thread(PrintNumber);
t.Start();
t.Join();
WriteLine("线程t执行结束,主线程执行。")
}
3:终止线程
Thread.Abort()方法可以终止该线程,需要注意的是,使用Abort终止线程时,有可能对程序造成异常从而彻底摧毁应用程序,另外,Abort并不一定总能终止线程,目标线程可以通过处理异常并调用Thread.ResetAbort()方法来拒绝被终止。此时可以优先考虑CancellationToken方法来取消线程的执行。
4:前台线程和后台线程
可以通过Thread对象的IsBackgroud属性来设置线程为前台线程还是后台线程,Thread对象通常默认为前台线程。前台线程和后台线程的主要区别:进程会等待所有的前台线程完成后再结束工作,但是如果只剩下后台线程,则会直接结束工作。如果程序定义了一个不会完成的前台线程,主程序并不会正常结束。