建议74:警惕线程的IsBackground

在CLR中,线程分为前台线程和后台线程,即每个线程都有一个IsBackground属性。两者在表现形式上的唯一区别是:如果前台线程不退出,应用程序的进程就会一直存在,必须所有的前台线程全部退出,应用程序才算退出。而后台进程则没有这方面的限制,如果应用程序退出,后台线程也会一并退出。

查看以下代码:

static void Main(string[] args)
{  Thread t = new Thread(() =>{  Console.WriteLine("线程开始工作……");  //省略工作代码
            Console.ReadKey();  Console.WriteLine("线程结束");  });  //注意,默认就为false  t.IsBackground = false;  t.Start();  Console.WriteLine("主线程完毕");
} 

用Thread创建的线程默认是前台线程,也就是IsBackground属性默认是false。以上代码需等到工作结束(敲入一个按键)应用程序才会结束,而如果设置IsBackground为true,应用程序则会立刻结束。

演示代码使用的是Thread,但我们要注意线程池中的线程默认都是后台线程。

基于前后台线程的区别,在实际编码中应该更多地使用后台线程。只有在非常关键的工作中,如线程正在执行事务或占有的某些非托管资源需要释放时,才使用前台线程。

转自:《编写高质量代码改善C#程序的157个建议》陆敏技

建议74:警惕线程的IsBackground相关推荐

  1. 编写高质量代码改善C#程序的157个建议——建议74:警惕线程的IsBackground

    建议74:警惕线程的IsBackground 在CLR中,线程分为前台线程和后台线程,即每个线程都有一个IsBackground属性.两者在表现形式上的唯一区别是:如果前台线程不退出,应用程序的进程就 ...

  2. 线程的IsBackground属性

    .Net的公用语言运行时(Common Language Runtime,CLR)能区分两种不同类型的线程:前台线程和后台线程.这两者的区别就是:应用程序必须运行完所有的前台线程才可以退出:而对于后台 ...

  3. 编写高质量代码:改善Java程序的151个建议(第5章:数组和集合___建议70~74)

    建议70:子列表只是原列表的一个视图 List接口提供了subList方法,其作用是返回一个列表的子列表,这与String类subSting有点类似,但它们的功能是否相同呢?我们来看如下代码: 1 p ...

  4. c#线程中的属性isbackground

    要点: 1.当在主线程中创建了一个线程,那么该线程的IsBackground默认是设置为FALSE的. 2.当主线程退出的时候,IsBackground=FALSE的线程还会继续执行下去,直到线程执行 ...

  5. IsBackground对线程的重要作用

    原文: IsBackground对线程的重要作用 要点: 1.当在主线程中创建了一个线程,那么该线程的IsBackground默认是设置为FALSE的. 2.当主线程退出的时候,IsBackgroun ...

  6. c# 线程Thread的IsBackground属性

    1.当在主线程中创建了一个线程,那么该线程的IsBackground默认是设置为FALSE的. 2.当主线程退出的时候,IsBackground=FALSE的线程还会继续执行下去,直到线程执行结束. ...

  7. 建议收藏,清华高材生准备的90条Python程序建议

    阅读本文大概需要 3 分钟. 本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我删除 自己写 Python 也有四五年了,一直是用自己的"强迫症"在维持自己代码的 ...

  8. python hello world程序编写_编写高质量代码 改善Python程序的91个建议

    建议1:理解Pythonic概念 建议2:编写Pythonic代码 建议3:理解Python与C语言的不同之处 建议4:在代码中适当添加注释 建议5:通过适当添加空行使代码布局更为优雅.合理 建议6: ...

  9. 总结了 90 条写 Python 程序的建议

    这是一名5年经验的 Python小伙伴总结的90条python建议,如果你也在学pythpn,准备要学习python,希望这篇文章对你有用. 1. 首先 建议1.理解Pythonic概念--详见Pyt ...

最新文章

  1. Josephus问题
  2. centos7 ssr一键脚本_RHEL7(Centos7)下使用shell脚本一键部署服务
  3. Android开发之自定义Notification(源代码分享)
  4. 网络爬虫(一):配置selenium、pycharm(windows平台)
  5. 阿里云张毅萍:构建边缘云全站加速网络体系
  6. python3抓取图片_通过Python3 爬虫抓取漫画图片
  7. DB2 存储过程中执行动态SQL的两种写法
  8. dell加装固态硬盘_技术丨如何进行笔记本硬盘拆装?
  9. FTP上传下载使用ASCII与binary的区别
  10. 证件照处理软件(IDPhoto Processor)免费版 v3.2.10
  11. Multisim14 安装出错情况说明,以及解决办法
  12. 使用Servlet来连接数据库并在前端展示
  13. 艾媒研报 |2019年腾讯控股(0700.HK)业务解读及发展趋势研究报告
  14. CST仿真指导 | 利用软件自带的示例与教程快速建模仿真
  15. 严蔚敏版数据结构——顺序栈
  16. SAP-FI-查看供应商,客户,总账科目记账明细
  17. mysql的char在java中表示为_Java学习篇之-Mysql中varchar门类总结_mysql
  18. 财务经历——京东换新服务/常用常新:一次换新经历匹配自己的知识库
  19. 超融合架构 — Hyper Converged Infrastructure 小记
  20. 可怕的冷读术:十二种瞬间打开陌生…

热门文章

  1. Windows Azure pack 升级填坑路--4 (SPF 2016 升级)
  2. Open Recent
  3. Leetcode之重排链表
  4. 【Linux】使用Xtion相机/SDK/openni2环境搭建
  5. 多隆:从工程师到合伙人 | 阿里技术人纪录片
  6. 巧用Macrodroid自动钉钉打卡
  7. Mac文件乱码 转换编码
  8. 【后端-SpringCache】基于Spring Cache 封装支持Redis缓存批量操作的方式_记录下踩坑历程(pipeline或mget封装)
  9. Android 走向MD的配色风格
  10. 介绍自己各种优点的英语表达(转帖)