C#多线程学习笔记之(abort与join配合使用)
来源:互联网 发布:千里眼扫描软件 编辑:程序博客网 时间:2024/05/18 06:22
随谈谈谈 请不吝赐教!
join就是线程合并到主线程的意思
不过真心听着不舒服 各位看官 听听我的吧!
using System;using System.Threading;namespace biovision.ihospital.his.Basic{ public class Simple { public static int Main() { Console.WriteLine("Thread Start/stop/join sample"); Alpha alpha = new Alpha(); Thread t = new Thread(new ThreadStart(alpha.Beta)); t.Start(); while (!t.IsAlive) Thread.Sleep(1); t.Abort(); //t.Join(); Console.WriteLine("alpha.Beta 已经结束,执行状态为" + t.IsAlive.ToString() + "线程状态为:" + t.ThreadState.ToString()); try { Console.WriteLine("试图重新启动 alpha.Beta"); t.Start(); } catch (ThreadStateException) { Console.WriteLine("ThreadStateException 试图重新启动t线程"); Console.WriteLine("t线程终止后不能被重启"); Console.ReadLine(); } return 0; } } public class Alpha { public void Beta() { while (true) { Console.WriteLine("Alpha.Beta 正在运行"); } } }}
奇怪,为什么线程abort()后isalive执行状态还是为TRUE呢,再看线程状态为AbortRequested,这意思是说线程已调用abort,但线程还未停止,于是再想想线程没停止,isalive属性为TRUE就变得合理了,那下面TRY语句块内再对线程重启就会产生错误了,都没停止何来产生重启呢?
但是问题还没有解决,如何才能让线程终止呢,难道abort不能让纯种终止吗?好了,先不要想那么多,我们把上述代码中t.join()注释符号给去掉,再来运行一下程序,结果如下:
好了,现在看看执行关态和线程状态我们得知线程终止了,而我们知道,当一个线程再调用abort()后是不能再start()了,所以同样会抛出异常,执行catch语句。综合两种情况来看,开始我还以为,难道只用abort()不用join()就不能终止线程吗?但是再对着两种结果和两个方法给出的介绍仔细想想就不难得出以下结论:
1.abort()的功能是用来终止调用此方法的线程的,只是在多数情况下,它需要一点时间,有些延迟(可能在短时间内此线程还在执行)...
2.join()方法它的功能不是终止线程,而是在t线程终止之前阻止主线程,直到t线程终止(也就是abort()方法终止过程完毕)了再执行下面的代码,打印出来的结果,执行状态就为FALSE,线程状态也为停止了
注意:在没有调用JOIN方法前,这段代码的执行结果可能为图中两种结果,都会存在,这可能根据电脑的不同,abort()执行时间有关,所以,这里join保证了我们在执行下面的代码时,t线程实现了“真正”的终止,我想这就是join用在abort()后的妙处吧!
- C#多线程学习笔记之(abort与join配合使用)
- C#多线程学习笔记之(abort与join配合使用)
- C#多线程学习笔记之(abort与join配合使用)
- C#多线程学习笔记之(abort与join配合使用)
- C#多线程学习笔记之(abort与join配合使用)
- C#多线程学习笔记之(abort与join配合使用)
- C#多线程Thread.Abort的使用
- C# 线程管理 abort join
- C# 多线程 Thread.Abort()
- java多线程学习之使用join()方法实现线程插队
- c#多线程调用方法之学习笔记
- Java 多线程学习笔记(九) join
- C#多线程学习笔记
- C#多线程学习笔记
- C#多线程学习笔记
- hive学习笔记之JOIN
- MYSQL 学习笔记 之 JOIN
- Java多线程学习与总结(Join)
- 加唯一约束
- ROS查看版本
- EmotioNet_
- 嵌入式之U-Boot学习笔记
- java对实体类列表进行方法内排序,不修改数据查询方式
- C#多线程学习笔记之(abort与join配合使用)
- 2017多校训练Contest2: 1011 Regular polygon hdu6055
- Spring Cloud-Eureka注册发现高可用(学习实践)
- memcached全面剖析–4. memcached的分布式算法
- 神奇的口袋(百练2755)
- Python编程之基本方法
- hydra暴力破解ssh密码
- jquery妙招去除html标记
- C#反射技术的简单操作(读取和设置类的属性)