关于Thread.IsBackground属性的理解

关于Thread.IsBackground属性的理解C#中,Thread类有一个IsBackground的属性.MSDN上对它的解释是:获取或设置一个值,该值指示某个线程是否为后台线程。个人感觉这样的解释等于没有解释..Net中的线程,可以分为后台线程和前台线程。后台线程与前台线程并没有本质的区别,它们之间唯一的区别就是:后台线程不会防止应用程序的进程被终止掉。呵呵,这句话读出来好像并不那么好懂.其实,说白了就是当前台线程都结束了的时候,…

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

Jetbrains全系列IDE稳定放心使用

C#中,Thread类有一个IsBackground 的属性.MSDN上对它的解释是:获取或设置一个值,该值指示某个线程是否为后台线程。个人感觉这样的解释等于没有解释.

.Net中的线程,可以分为后台线程和前台线程。后台线程与前台线程并没有本质的区别,它们之间唯一的区别就是:后台线程不会防止应用程序的进程被终止掉。呵呵,这句话读出来好像并不那么好懂.

其实,说白了就是当前台线程都结束了的时候,整个程序也就结束了,即使还有后台线程正在运行,此时,所有剩余的后台线程都会被停止且不会完成.但是,只要还有一个前台线程没有结束,那么它将阻止程序结束.这就是为什么有些设计不够完美的WinForm程序,在某种特定的情况下,即使所有的窗口都关闭了,但是在任务管理器的管理列表里仍然可以找到该程序的进程,仍然在消耗着CPU和内存资源.因此,在WinForm程序中,关闭所有窗口前,应该停止所有前台线程,千万不要遗忘了某个前台线程.应用程序进程的存亡由前台线程决定而于后台线程无关.这就是它们的区别.

知道了前后台线程的区别,就应该知道如何声明IsBackgroud属性的值了.

值得说明的一点是:改变线程从前台到后台不会以任何方式改变它在CPU协调程序中的优先级和状态。因为前台后线程与程序进程的优先级无关.

结束前摘录MSDN上一段示例码,以帮助大家便好的理解这一区别:

下面的代码示例对比了前台线程与后台线程的行为。创建一个前台线程和一个后台线程。前台线程使进程保持运行,直到它完成它的 while 循环。前台线程完成后,进程在后台线程完成它的 while 循环之前终止。

using System;
using System.Threading;

class Test
{
    static void Main()
    {
        BackgroundTest shortTest = new BackgroundTest(10);
        Thread foregroundThread = 
            new Thread(new ThreadStart(shortTest.RunLoop));
        foregroundThread.Name = "ForegroundThread";

        BackgroundTest longTest = new BackgroundTest(50);
        Thread backgroundThread = 
            new Thread(new ThreadStart(longTest.RunLoop));
        backgroundThread.Name = "BackgroundThread";
        backgroundThread.IsBackground = true;

        foregroundThread.Start();
        backgroundThread.Start();
    }
}

class BackgroundTest
{
    int maxIterations;

    public BackgroundTest(int maxIterations)
    {
        this.maxIterations = maxIterations;
    }

    public void RunLoop()
    {
        String threadName = Thread.CurrentThread.Name;
        
        for(int i = 0; i < maxIterations; i++)
        {
            Console.WriteLine("{0} count: {1}", 
                threadName, i.ToString());
            Thread.Sleep(250);
        }
        Console.WriteLine("{0} finished counting.", threadName);
    }
}

 

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/181359.html原文链接:https://javaforall.net

(0)
上一篇 2022年10月16日 下午1:46
下一篇 2022年10月16日 下午2:00


相关推荐

  • token实现验证登录(token如何使用)

    1.场景还原可能还有很多小伙伴对token概念朦朦胧胧,今天笔者以项目中的用户登录的token验证需求跟大家讲讲其中的来龙去脉,希望能够理清大伙的思路。2.需求分析这个需求可能早已是老生常谈,但我觉得它永远也不会过时①谷歌浏览器:login.html—->index.html;②然后复制index.html的地址在IE浏览器地址栏上,这时普遍网站都会使访问界面直接

    2022年4月14日
    292
  • pycharm qt designer_pycharm怎么运行py文件

    pycharm qt designer_pycharm怎么运行py文件pycharm集成QTdesigner+ui转py工具前言一、前期安装二、pycharm配置QTdesigner1.外部工具配置2.pycharm可直接调用designer三、pycharm配置pyuic(将ui文件转换为py文件)1.外部工具配置2.pycharm可直接调用pyuic工具四、显示代码和逻辑代码分离1.使用designer设计示意界面总结前言后面使用PyQt5开始设计界面、使用pycharm这个IDE进行逻辑代码和界面代码的融合。一、前期安装前提:按照《PythonGUI.

    2022年8月29日
    4
  • RPC是什么意思?[通俗易懂]

    原文地址:http://baike.baidu.com/link?url=ZV6b0T5v04pem1NluXrFwslmhOosGK3YAeKYBfXHF3J-cg96O7CE9j_opGpKCftpBKWqLtY9-LycDAX0ULaLpssX4IIVmK6fSdtZBzz6nbFRsA-vXppB4IV1KBfDu07pY2dgZYTn5A65RkuhPO00bf5ngU6qfujFC14

    2022年4月4日
    138
  • ccd视觉定位教程_正规CCD视觉定位系统工作原理[通俗易懂]

    ccd视觉定位教程_正规CCD视觉定位系统工作原理[通俗易懂]产品品牌CCD视觉定位系统发货城市-有效期至长期有效最小起订1产品单价面议深圳精科视觉科技有限公司成立于2011年底,是一家在视觉及自动化领域有着多年经验的科技公司,专业从事非标自动化机器视觉整套解决方案。公司集研发、销售、维护为一体,汇聚了一批追求卓越、勇于探索、敢于创新、在行业内具有丰富经验的工程技术人员,组建了一支专业、敬业的市场营销团队。激光打标技术具有以下的特点1、可对绝大多数金属或非金…

    2022年6月16日
    54
  • opengl glPushMatrix()[通俗易懂]

    opengl glPushMatrix()[通俗易懂]OpenGL有三个矩阵堆栈,分别是GL_MODELVIEW(模型视图矩阵堆栈)、GL_PROJECTION(投影矩阵堆栈)、GL_TEXTURE(纹理矩阵堆栈),用法和普通堆栈一样;这里我们只讲模型视图矩阵堆栈,OpenGL提供了相应的接口:glPushMatirx()和glPopMatrix()。这个模型视图矩阵堆栈是干嘛用的呢?我们在三维空间中绘制模型,大部分时候需要对模型进行

    2025年8月3日
    5
  • php – 通过curl从url获取JSON数据「建议收藏」

    php – 通过curl从url获取JSON数据

    2022年2月10日
    46

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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