《C#多线程编程实战(原书第2版)》——1.6 检测线程状态-阿里云开发者社区

开发者社区> 华章出版社> 正文

《C#多线程编程实战(原书第2版)》——1.6 检测线程状态

简介:

本节书摘来自华章出版社《C#多线程编程实战(原书第2版)》一书中的第1章,第1.6节,作者(美)易格恩·阿格佛温(Eugene Agafonov),黄博文 黄辉兰 译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.6 检测线程状态

本节将描述一个线程可能会有哪些状态。获取线程是否已经启动或是否处于阻塞状态等相应信息是非常有用的。请注意由于线程是独立运行的,所以其状态可以在任何时候被改变。

1.6.1 准备工作

为了学习本节,你需要安装Visual Studio 2015。除此之外无需其他准备。本节的源代码放置在BookSamplesChapter1Recipe5目录中。

1.6.2 实现方式

请执行以下步骤来了解如何确定线程状态及获取线程相关的信息。

1.启动Visual Studio 2015。创建一个新的C#控制台应用程序项目。

2.在Program.cs文件中加入以下using指令:


e357394a478b4adbada084552d441a333a3a8f6a

3.在Main方法下面加入以下代码片段:


3bfac995dd97f3eccd8638baafa26cdf73f6b3e6

4.在Main方法中加入以下代码片段:


2f1d4f634f3be93c1515c087bb8044379962d871

5.运行程序。

1.6.3 工作原理

当主程序启动时定义了两个不同的线程。一个将被终止,另一个则会成功完成运行。线程状态位于Thread对象的ThreadState属性中。ThreadState属性是一个C#枚举对象。刚开始线程状态为ThreadState.Unstarted。然后我们启动线程,并估计在一个周期为30次迭代的区间中,线程状态会从ThreadState.Running变为ThreadState.WaitSleepJoin。

请注意始终可以通过Thread.CurrentThread静态属性获得当前Thread对象。

如果实际情况与以上不符,请增加迭代次数。终止第一个线程后,会看到现在该线程状态为ThreadState.Aborted。程序也有可能会打印出ThreadState.AbortRequested状态。这充分说明了同步两个线程的复杂性。请记住不要在程序中使用线程终止。我在这里使用它只是为了展示相应的线程状态。

最后可以看到第二个线程t2成功完成并且状态为ThreadState.Stopped。另外还有一些其他的线程状态,但是要么已经被弃用,要么没有我们实验过的几种状态有用。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:

华章出版社

官方博客
官网链接