1.线程分类

线程由程序员创建,可是创建的方式不同,总体来说有两种,一种是个人构造,也就是使用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工厂创建的线程都默认为后台线程

https://www.cnblogs.com/Matcha/p/5334022.html

最新文章

  1. JS中判断鼠标按键的问题
  2. mysql中文乱码解决方法
  3. redis数据结构整理(一)
  4. oracle学习笔记系列------oracle 基本操作之基本函数的用法
  5. nginx 虚拟主机
  6. Selenium_模拟淘宝登录Demo
  7. [IT学习]一些有用的工具
  8. ie8 不支持new Date(&#39;2012-11-10&#39;)
  9. oracle的簇的管理
  10. linux 下wifi 功能的实现
  11. 【.NET调用Python脚本】C#调用python requests类库报错 &#39;module&#39; object has no attribute &#39;_getframe&#39; - IronPython 2.7
  12. C#中hashtable的赋值、取值、遍历、排序操作
  13. javascript基础-HTML5
  14. Java反射机制练习
  15. UVA 10622 Perfect P-th Powers
  16. 纯CSS编写汉克狗
  17. VS2015安装水晶报表
  18. View操作 swift
  19. 自己总结的C#编码规范--3.特定场景下的命名最佳实践
  20. My blog in AI -- 梯度下降算法

热门文章

  1. SQLServer中处理亿万级别的数据
  2. Android SDK离线安装更新方法
  3. Python学习(十四) —— 并发编程
  4. Thinkphp3.1 php 链接SqlServer
  5. java06作业归档
  6. day5 列表的增删改查
  7. 2017Nowcoder Girl D - 打车
  8. hive中的分桶表
  9. 20165220 2017-2018-2《Java程序设计》课程总结
  10. HDU 1811 Rank of Tetris 【拓扑排序】+【并查集】