一、关于前台线程和后台线程
1、简介
CLR中线程分为两种类型,一种是前台线程、另一种是后台线程.
前台线程:应用程序的主线程、Thread构造的线程都默认为前台线程
后台线程:线程池线程都为后台线程
2、区别
前台线程:前台线程一般执行重要性很高的任务,至于什么是重要性很高,这个需要结合业务综合考虑,哪些操作是当前应用程序必须执行的.
后台线程:这里需要注意,当一个进程的所有前台线程关闭时,也就是当应用程序推出的时候,无论后台线程有没有执行完它的任务,它都会被强制关闭.但是,当应用程序开启时,它又会重新启动.后台线程一般执行不重要、耗时很短的任务,就算进程(应用程序)关闭了,导致它强制关闭,也不会造成影响的任务.比如系统清理程序等.
注意:一般进程会在所有的前台线程执行完毕时关闭.
3、代码演示区别
前台线程:
static void Main(string[] args)
{
var thread = new Thread(DoWork);
thread.Start();
}
private static void DoWork()
{
Thread.Sleep(2000);
Console.WriteLine("子线程处理完工作,已结束");
}
子线程停留两秒后,控制台消失.
后台线程:
static void Main(string[] args)
{
var thread = new Thread(DoWork);
thread.IsBackground = true;
thread.Start();
}
private static void DoWork()
{
Thread.Sleep(2000);
Console.WriteLine("子线程处理完工作,已结束");
}
控制台不等子线程处理完,直接消失.
效果很直观,前台线程会执行完才结束进程,但是后台线程则不会.