一个线程崩溃会引起整个进程崩溃_大量线程状态waiting

一个线程崩溃会引起整个进程崩溃_大量线程状态waiting建议74:警惕线程的IsBackground在CLR中,线程分为前台线程和后台线程,即每个线程都有一个IsBackground属性。两者在表现形式上的唯一区别是:如果前台线程不退出,应用程序的进程就会一直存在,必须所有的前台线程全部退出,应用程序才算退出。而后台进程则没有这方面的限制,如果应用程序退出,后台线程也会一并退出。查看以下代码:staticvoidMain

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

建议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个建议》陆敏技

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/181161.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • html背景图片的设置宽高_网页的背景图片怎么设置

    html背景图片的设置宽高_网页的背景图片怎么设置背景图片的设置,背景图片大小、位置、是否重复以及附着点的问题

  • html卷轴展开动画,Flash制作卷轴展开的动画

    html卷轴展开动画,Flash制作卷轴展开的动画推荐:Flash制作搞笑QQ表情动画副标题#e#QQ表情已经成为一种流行文化,聊天的时候我们经常会被一些搞怪的QQ表情逗得忍俊不禁。其实这些表情制作的方法并不难,只要掌握一些Flash的基本操作,我们就可以把自己的好创意也制作成表情。本实例来自我自己画的一套圆圆溜溜搞怪表情中的一个,下面是制作过北京奥运会开幕式上那充满诗意的卷轴,以及它所呈现给我们的一幅幅无法言喻的美妙画面,大家一定还记忆犹新吧…

  • 用 Java 实现拦截器 Interceptor 的拦截功能

    用 Java 实现拦截器 Interceptor 的拦截功能Java里的拦截器是动态拦截action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行,同时也提供了一种可以提取action中可重用部分的方式。在AOP(Aspect-OrientedProgramming)中拦截器用于在某个方法或字段被访问之前进行拦截,然后在之前或之后加入某些操作。  此外,拦截

  • 常量字符串过长的解决办法_jdbc编译异常

    常量字符串过长的解决办法_jdbc编译异常如果使用String str = “这是一个很长很长很长 你需要的字符串。”; 出现异常不能正常编译运行时,可以使用下方:StringBuilder sb = new StringBuilder();sb.append(“这是一个很长很长”);sb.append(“很长 你需要的字符串”);字符串太长或字符串其他情况下可使用 : StringBuilder sb = new StringBuilder()…

  • ssm框架整合步骤_bootstrap框架搭建

    ssm框架整合步骤_bootstrap框架搭建描述普通情况下,控制台打印出的sql是带?的,开发人员在自己调试的过程中遇到bug是再常见不过了,如果想看一下程序打出来的sql,发现参数的位置都是?,是不是很不爽,若想在数据库中执行sql,还需要手动修改sql的参数,真是麻烦,使用p6spy可以将sql格式化然后打出,打出的sql不再是带有?的,而是可以直接拷贝到数据库执行的。整合步骤如下:添加jar包依赖在service层…

  • BigDecimal类的简单使用方法

    BigDecimal类的简单使用方法

    2021年12月14日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号