• C#中的前台线程和后台线程的概念
  • 波涛中的小船 发表于 2016/3/29 19:37:00 | 分类标签: 线程 多线程 死锁
  • 线程分类

    线程由程序员创建,可是创建的方式不同,总体来说有两种,一种是个人构造,也就是使用thread类new线程对象创建,这一类线程是大部分程序员知道的,也叫专用线程;还有一种是由CLR创建,这一类线程主要存在于线程池中,也叫线程池线程。对于这两种线程的好坏,个人建议最好使用线程池线程,不要大量使用专用线程,对于这一个问题的探讨,读者可以做研究,本文不做讨论。

    前台线程和后台线程

    而从回收的角度来看又可分为前台线程和后台线程

    后台线程:后台线程是可以随时被CLR关闭而不引发异常的,也就是说当后台线程被关闭时,资源的回收是立即的,不等待的,也不考虑后台线程是否执行完成,就算是正在执行中也立即被终止。【后台,存在于黑暗之中默默无闻,它的消亡和存在,别人也感受不到】

    前台线程:前台线程是不会被立即关闭的,它的关闭只会发生在自己执行完成时,不受外在因素的影响。假如应用程序退出,造成它的前台线程终止,此时CLR仍然保持活动并运行,使应用程序能继续运行,当它的的前台线程都终止后,整个进程才会被销毁。

    所以应该使用前台线程执行确实想完成的任务,比如数据的拷贝等等.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.IO;

    class class1
    {
    static void Main(string[] args)
    {
    Thread tmpThread = new Thread(WriteFile);//默认为前台线程
    tmpThread.Name = "TestThread";
    //tmpThread.IsBackground = true;
    tmpThread.Start();

    //Console.ReadKey();
    }

    /// <summary>
    /// 写文件
    /// </summary>
    static void WriteFile()
    {
    while (true)
    {
    using (FileStream fs = File.Open(@"D:\test.txt", FileMode.Append, FileAccess.Write, FileShare.ReadWrite))
    {
    byte[] buff = System.Text.UnicodeEncoding.UTF8.GetBytes(string.Format("Time:{0}\r\n", DateTime.Now.ToString()));
    fs.Write(buff, 0, buff.Length);
    }
    Thread.Sleep(10);
    }

    }
    }
    在上面的程序中我们使用了一个线程默认为前台线程,当控制台程序的Main函数执行完时,前台线程任然在写文件,如下如:
    2.说明
    (1)在任何时候我们都可以通过线程的IsBackground属性改变线程的前后台属性
    (2)应用程序的主线程以及使用Thread构造的线程都默认为前台线程

     线程池线程也就是使用 ThreadPool.QueueUserWorkItem()和Task工厂创建的线程都默认为后台线程
  • 请您注意

    ·自觉遵守:爱国、守法、自律、真实、文明的原则

    ·尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法规

    ·严禁发表危害国家安全,破坏民族团结、国家宗教政策和社会稳定,含侮辱、诽谤、教唆、淫秽等内容的作品

    ·承担一切因您的行为而直接或间接导致的民事或刑事法律责任

    ·您在编程中国社区新闻评论发表的作品,本网站有权在网站内保留、转载、引用或者删除

    ·参与本评论即表明您已经阅读并接受上述条款

  • 感谢本文作者
  • 作者头像
  • 昵称:波涛中的小船
  • 加入时间:2013/6/5 0:00:00
  • TA的签名
  • 这家伙很懒,虾米都没写
  • +进入TA的空间
  • 以下内容也很赞哦
分享按钮