前台线程和后台线程的问题

来源:互联网 发布:php 文章内链 编辑:程序博客网 时间:2024/05/21 09:10

线程按照结束方式来说,分为前台线程和后台线程

一个应用程序运行,会启动一个进程,这个进程拥有多个线程,其中可能有前台线程,也有后台线程。只有所有的前台线程都结束了,系统才会卸载应用程序域,也就是说,停止该进程,回收该进程占用的内存等资源。后台线程必须依附于某个前台线程,不能单独存在。当所有的前台线程都退出后,系统会强制结束所有的后台线程,并卸载应用程序域。举个例子来说,有一个WinForm程序,第一种情况,A为UI线程,是前台线程,B也为前台线程,向某一个文本写入信息。注意,B线程是不像UI线程那样能够直观的让人看见,有点类似于QQ等后台运行的意思,但是这依然是一个前台线程。这是由线程的IsBackgournd属性决定的。B线程自打开始运行后,就不会再受到父线程的任何影响,两者是一个完全平行的关系。当我们关闭UI后,前台线程结束了,虽然现在看不到任何界面,但是子线程B线程依然在运行。所以,系统也就没有结束这些线程所在的进程。第二种情况,A为UI线程,是前台线程,B为向文本写入内容的线程,但这次设置为了后台线程。当我们把UI线程关闭后,所有的前台线程都消失了,此时,B线程的父线程结束了,B线程也会被系统强制结束。我们发现,向文本写入内容的后台线程已经自动被强制结束了。


主线程与子线程,是线程出现方式上的概念

一个线程产生了另一个线程,前者就是主线程,后者就是子线程。线程一旦产生,那么就与主线程是平等的地位,没有主次的关系。在WinForm程序中,第一个线程是UI线程,其他线程都是由这个线程产生的,所以UI线程是主线程。但是从这个线程衍生出来的任何线程,无论是前台线程,还是后台线程,相互之间,以及与UI线程,都是地位平等的关系。如果产生的子线程是前台线程,那么主线程与子线程就是在生命周期方面是平行的关系,相互之间是平等的。如果产生的子线程是后台线程,那么,这个线程与前台线程唯一的区别就是,不会阻止进程的结束,当所有前台线程结束后,这个线程会被强制结束

这样设计的原因:因为后台线程一般做的都是需要花费大量时间的工作,如果不这样设计,主线程已经结束,而后台工作线程还在继续,后台线程即时执行完成也已经没有什么实际的意义。比如说,有一个WinForm程序,UI用来显示计算结果,子线程B用来进行大量的十分耗时耗资源的计算。当用户打开程序后,由于某种原因,UI线程死掉并且退出了,如果此时子线程不是后台线程被强制结束的话,剩下的耗时耗资源的运算是没有意义的,因为即使有了结果,也无法再UI上来显示,因为UI已经退出了。另外的例子,Word的UI线程为前台线程,拼写检查为后台线程。如果关闭Word应用程序,拼写检查器继续运行器进程就没有意义了。在应用程序结束时,拼写检查器就可以关闭了。


主线程与子线程,前台线程与后台线程,是从线程的生成顺序和线程是否阻止进程退出这两个不同的方面进行区分的,是不同方面的概念。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苹果手机滑不动怎么办 升级失败白苹果怎么办 6s屏幕不准怎么办 苹果4s充不进电怎么办 苹果4sbi锁怎么办 乐视pro3充电慢怎么办 手机屏幕触碰不灵敏怎么办 手机换屏幕失灵怎么办 手机图标有重影怎么办 苹果屏幕太灵敏怎么办 5s触摸不灵敏怎么办 导航触屏失灵怎么办 汽车导航触摸屏失灵怎么办 爱丽舍导航仪触屏失灵怎么办 手机要开机很久怎么办 小米手机屏失灵怎么办 5s手机屏幕松动怎么办 手机按钮不灵了怎么办 手机触摸屏不灵了怎么办 mac触摸板失灵怎么办 苹果屏幕触摸失灵怎么办 三星手机屏幕没反应怎么办 手机开机定屏怎么办 手机触摸局部失灵怎么办 苹果手机屏幕按键失灵怎么办 5s锁屏键坏了怎么办 平板版本太低怎么办 手机屏局部失灵怎么办 iphone8触屏不灵敏怎么办 苹果机8屏幕失灵怎么办 车钥匙丢车上怎么办 指纹锁华盖坏了怎么办 非法入了户口怎么办 司考成绩单丢了怎么办 小饭桌转让手续怎么办 两个领导不和你怎么办 两个领导意见不一致怎么办 两个领导对立我怎么办 投诉申通没用怎么办 领导作风有问题怎么办 做完火疗受风了难受怎么办