对于线程而言有两种类型:前台线程,后台线程。前台与后台线程性质相同,但终止条件不同。

后台线程:在运行过程中如果宿主进程结束,线程将直接终止执行;在强制终止时,线程即终止执行不论线程代码是否执行完毕。

前台线程:在运行过程中如果宿主进程结束,线程将继续执行直至线程代码执行完毕;在强制终止时,线程即结束不论线程代码是否执行完毕。

后台线程生命周期:

上图显示:只要宿主进程结束,后台线程必定结束

上图显示:后台线程功能执行完毕或被强行终止即进入结束状态,此时宿主进程并未结束

-----------------------------------------------------------------------------------------------------------------

前台线程生命周期:

上图显示:前台线程功能执行完毕或被强行终止即进入结束状态,此时宿主进程并未结束

上图显示:宿主进程执行完毕,但前台线程功能未执行完毕的情况下,线程将不再依赖进程继续执行,直到代码执行完毕

private static void MultiThreadLifecycle(){ParameterizedThreadStart task = (sleep) =>{int i = Convert.ToInt32(sleep);try{for (var i = 0; i < 10; i++){Console.WriteLine(String.Format("Thread {0} Out:{1}", Thread.CurrentThread.Name, i));Thread.Sleep(i);}Console.WriteLine(String.Format("Sub Thread {0} The End", Thread.CurrentThread.Name));}catch (ThreadAbortException ex){Console.WriteLine(String.Format("Sub Thread {0} Abort", Thread.CurrentThread.Name));}};Console.WriteLine("Main Thread");Thread thread1 = new Thread(task){Name = "thread1"};Thread thread2 = new Thread(task){Name = "thread2",IsBackground = true};thread1.Start(5000);thread2.Start(5000);Console.WriteLine("Main Thread Wait Sub Thread");thread1.Abort();Console.ReadLine();Console.WriteLine(String.Format("{0}:{1},{2}:{3}",thread1.Name,thread1.ThreadState,thread2.Name,thread2.ThreadState));}

说明:

1、设置现成是否为后台线程,可通过线程对象的 IsBackground 属性设置

2、强制终止线程可通过线程对象的Abort()方法进行,同时应该在线程中进行 ThreadAbortException 异常处理,因为在强制结束未执行完成的线程时会抛出该异常。

转载于:https://www.cnblogs.com/dw039/p/7397828.html

C#多线程的用法2-线程的生命周期相关推荐

  1. Java 多线程(三) 线程的生命周期及优先级

    Java 多线程(三) 线程的生命周期及优先级 线程的生命周期 线程的生命周期:一个线程从创建到消亡的过程. 如下图,表示线程生命周期中的各个状态: 线程的生命周期可以分为四个状态: 1.创建状态: ...

  2. java中线程调度遵循的原则_Java 多线程(三) 线程的生命周期及优先级

    线程的生命周期 线程的生命周期:一个线程从创建到消亡的过程. 如下图,表示线程生命周期中的各个状态: 线程的生命周期可以分为四个状态: 1.创建状态: 当用new操作符创建一个新的线程对象时,该线程处 ...

  3. Java多线程(3)--线程的生命周期

    JDK中用Thread.State类定义了线程的五种状态 要想实现多线程,必须在主线程中创建新的线程对象.Java语言使用Thread类及其子类的对象来表示线程,在它的一个完整的生命周期中通常要经历如 ...

  4. java多线程笔记补充之线程的生命周期

    多线程通信的时候很容易造成死锁,死锁无法解决,只能避免: 当A线程等待由B线程持有的锁,而B线程正在等待A线程持有的锁时,发生死锁现象,JVM不检测也不试图避免这种情况,所以程序员必须保证不导致死锁. ...

  5. 多线程——线程的生命周期

    线程状态: 与人有生老病死一样,线程也同样要经历新建.就绪.运行(活动).阻塞和死亡五种不同的状态.这五种状态 都可以通过Thread类中的方法进行控制.创建并运行线程: ① 新建状态(New Thr ...

  6. Java 多线程— 线程的生命周期及方法

    2019独角兽企业重金招聘Python工程师标准>>> 这篇博客介绍线程的生命周期. 线程是一个动态执行的过程,它也有从创建到死亡的过程. 线程的几种状态 在 Thread 类中,有 ...

  7. 线程(线程基本概念、java实现多线程、使用多线程、线程的生命周期、线程同步、线程死锁)

    (一)线程基本概念 一. 程序, 进程, 线程的概念 程序: 使用某种语言编写一组指令(代码)的集合,静态的 进程: 运行的程序,表示程序一次完整的执行, 当程序运行完成, 进程也就结束了 个人电脑: ...

  8. java 多线程编程(包括创建线程的三种方式、线程的生命周期、线程的调度策略、线程同步、线程通信、线程池、死锁等)

    1 多线程的基础知识 1.1 单核CPU和多核CPU 单核CPU,其实是一种假的多线程,因为在一个时间单元内,也只能执行一个线程的任务.微观上这些程序是分时的交替运行,只不过是给人的感觉是同时运行,那 ...

  9. 【多线程】线程的生命周期

    搞懂生命周期中各个节点的状态转换机制. 通用的线程生命周期 初始状态:指的是线程已经被创建,但是还不允许分配CPU执行.(这里的被创建,仅仅是在编程语言层面被创建,而在操作系统层面,真正的线程还没有创 ...

  10. 一心多用多线程-线程的生命周期

    想起前段时间做校招的时候经常会被问到线程的生命周期问题,现在结合api做一下归纳 1.新建状态 new Thread() 创建一个线程,现在的线程并没有具备运动能力的,可以想象你新建了一只兔子,但是这 ...

最新文章

  1. [译] Kotlin 标准方法备忘
  2. 厉害了!SpringBoot是如何动起来的!
  3. mysql---复杂的sql语句join的使用(left join,right join)
  4. 怎么修改file文件框的无文件提示_使用LativeLink时,DO文件编制步骤
  5. PyCharm pyqt5用label控件显示图片 QPixmap 串口通信指示灯
  6. Spring MVC 执行过程原理(请求映射原理、参数处理原理、返回值处理器)
  7. 多合一图床源码 - QQ图床/搜狗图床/头条图床
  8. javascript class constructor
  9. spring.xml从外部文件引入数据库配置信息
  10. 洛谷1551 亲戚
  11. 如何使用Jmeter对WebSocket进行压力测试
  12. 牛客网–华为机试在线训练5:进制转换
  13. Java Date Time 教程-System.currentTimeMillis()
  14. Ubuntu 16.04 安装VNC服务端
  15. STC学习:定时器和中断
  16. Laravel框架介绍与简介
  17. 数学建模系列-预测模型(五)---马尔可夫链
  18. 郭金东金浦集团荣登“2019中国民营企业500强”和“2019中国民营企业制造业500强”榜单
  19. halcon学习之路
  20. ASP.Net绑定Sql数据源用echarts图表来展示数据

热门文章

  1. L2TP OVER IPSEC原理详解
  2. Spring思维导图(AOP篇)
  3. 编辑器CKEditor
  4. ThinkPHP中create()方法自动验证表单信息
  5. 《Python 学习手册4th》 第十六章 函数基础
  6. Hybrid端口配置理解
  7. 使用spring cloud,nacos,dubbo,gateway搭建微服务
  8. Unity Lerp函数的妙用
  9. QBC检索和本地SQL检索
  10. 还在被网络上各种关于单片机行业的收入搞的眼花缭乱而烦恼吗