C#多线程的用法2-线程的生命周期
对于线程而言有两种类型:前台线程,后台线程。前台与后台线程性质相同,但终止条件不同。
后台线程:在运行过程中如果宿主进程结束,线程将直接终止执行;在强制终止时,线程即终止执行不论线程代码是否执行完毕。
前台线程:在运行过程中如果宿主进程结束,线程将继续执行直至线程代码执行完毕;在强制终止时,线程即结束不论线程代码是否执行完毕。
后台线程生命周期:
上图显示:只要宿主进程结束,后台线程必定结束
上图显示:后台线程功能执行完毕或被强行终止即进入结束状态,此时宿主进程并未结束
-----------------------------------------------------------------------------------------------------------------
前台线程生命周期:
上图显示:前台线程功能执行完毕或被强行终止即进入结束状态,此时宿主进程并未结束
上图显示:宿主进程执行完毕,但前台线程功能未执行完毕的情况下,线程将不再依赖进程继续执行,直到代码执行完毕
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-线程的生命周期相关推荐
- Java 多线程(三) 线程的生命周期及优先级
Java 多线程(三) 线程的生命周期及优先级 线程的生命周期 线程的生命周期:一个线程从创建到消亡的过程. 如下图,表示线程生命周期中的各个状态: 线程的生命周期可以分为四个状态: 1.创建状态: ...
- java中线程调度遵循的原则_Java 多线程(三) 线程的生命周期及优先级
线程的生命周期 线程的生命周期:一个线程从创建到消亡的过程. 如下图,表示线程生命周期中的各个状态: 线程的生命周期可以分为四个状态: 1.创建状态: 当用new操作符创建一个新的线程对象时,该线程处 ...
- Java多线程(3)--线程的生命周期
JDK中用Thread.State类定义了线程的五种状态 要想实现多线程,必须在主线程中创建新的线程对象.Java语言使用Thread类及其子类的对象来表示线程,在它的一个完整的生命周期中通常要经历如 ...
- java多线程笔记补充之线程的生命周期
多线程通信的时候很容易造成死锁,死锁无法解决,只能避免: 当A线程等待由B线程持有的锁,而B线程正在等待A线程持有的锁时,发生死锁现象,JVM不检测也不试图避免这种情况,所以程序员必须保证不导致死锁. ...
- 多线程——线程的生命周期
线程状态: 与人有生老病死一样,线程也同样要经历新建.就绪.运行(活动).阻塞和死亡五种不同的状态.这五种状态 都可以通过Thread类中的方法进行控制.创建并运行线程: ① 新建状态(New Thr ...
- Java 多线程— 线程的生命周期及方法
2019独角兽企业重金招聘Python工程师标准>>> 这篇博客介绍线程的生命周期. 线程是一个动态执行的过程,它也有从创建到死亡的过程. 线程的几种状态 在 Thread 类中,有 ...
- 线程(线程基本概念、java实现多线程、使用多线程、线程的生命周期、线程同步、线程死锁)
(一)线程基本概念 一. 程序, 进程, 线程的概念 程序: 使用某种语言编写一组指令(代码)的集合,静态的 进程: 运行的程序,表示程序一次完整的执行, 当程序运行完成, 进程也就结束了 个人电脑: ...
- java 多线程编程(包括创建线程的三种方式、线程的生命周期、线程的调度策略、线程同步、线程通信、线程池、死锁等)
1 多线程的基础知识 1.1 单核CPU和多核CPU 单核CPU,其实是一种假的多线程,因为在一个时间单元内,也只能执行一个线程的任务.微观上这些程序是分时的交替运行,只不过是给人的感觉是同时运行,那 ...
- 【多线程】线程的生命周期
搞懂生命周期中各个节点的状态转换机制. 通用的线程生命周期 初始状态:指的是线程已经被创建,但是还不允许分配CPU执行.(这里的被创建,仅仅是在编程语言层面被创建,而在操作系统层面,真正的线程还没有创 ...
- 一心多用多线程-线程的生命周期
想起前段时间做校招的时候经常会被问到线程的生命周期问题,现在结合api做一下归纳 1.新建状态 new Thread() 创建一个线程,现在的线程并没有具备运动能力的,可以想象你新建了一只兔子,但是这 ...
最新文章
- [译] Kotlin 标准方法备忘
- 厉害了!SpringBoot是如何动起来的!
- mysql---复杂的sql语句join的使用(left join,right join)
- 怎么修改file文件框的无文件提示_使用LativeLink时,DO文件编制步骤
- PyCharm pyqt5用label控件显示图片 QPixmap 串口通信指示灯
- Spring MVC 执行过程原理(请求映射原理、参数处理原理、返回值处理器)
- 多合一图床源码 - QQ图床/搜狗图床/头条图床
- javascript class constructor
- spring.xml从外部文件引入数据库配置信息
- 洛谷1551 亲戚
- 如何使用Jmeter对WebSocket进行压力测试
- 牛客网–华为机试在线训练5:进制转换
- Java Date Time 教程-System.currentTimeMillis()
- Ubuntu 16.04 安装VNC服务端
- STC学习:定时器和中断
- Laravel框架介绍与简介
- 数学建模系列-预测模型(五)---马尔可夫链
- 郭金东金浦集团荣登“2019中国民营企业500强”和“2019中国民营企业制造业500强”榜单
- halcon学习之路
- ASP.Net绑定Sql数据源用echarts图表来展示数据