怎样检测线程的状态(c代码 )如:线程是死亡、阻塞、挂起等。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样检测线程的状态(c代码 )如:线程是死亡、阻塞、挂起等。相关的知识,希望对你有一定的参考价值。

道线程还有这么多状态的,线程主要状态不是只有:创建-》就绪-》运行->阻塞-》终止 吗?

我是用java的,介绍下java的Thread的方法
1. sleep()方法:sleep()允许指定以毫秒为单位的一段时间作为参数,它使得线程在指定的时间内进入阻塞状态,不能得到CPU 时间,指定的时间一过,线程重新进入可执行状态。这可以理解为休眠吗?或者是阻塞?
2.yield() 方法:yield() 使得线程放弃当前分得的 CPU 时间,但是不使线程阻塞,即线程仍处于可执行状态,随时可能再次分得 CPU 时间。调用 yield() 的效果等价于调度程序认为该线程已执行了足够的时间从而转到另一个线程。
3.wait() 和 notify() 方法:两个方法配套使用,wait() 使得线程进入阻塞状态,它有两种形式,一种允许指定以毫秒为单位的一段时间作为参数,另一种没有参数,前者当对应的 notify() 被调用或者超出指定时间时线程重新进入可执行状态,后者则必须对应的 notify() 被调用。

而我自己经常用的是在run()方法里面用标识符,根据条件改变标识符的值来控制循环的运行,或者是监听某个输入条件,监听不到就一直等待在那里。

挂起我倒是在进程上听过,
就绪挂起: 进程在内存外,但只要被调入内存就可运行
等待挂起: 进程在外存中,并且等待某件事情发生
不知道这和线程是不是一样。

而阻塞,中断和休眠在java里面好像都是用sleep()来完成的,在我理解起来其实是一种状态, 但因为我的水平问题,对内存什么的没什么研究,所以我很期待有人能解答。

期待大神!
期待大神!
期待大神!
期待大神!
期待大神!
期待大神!
参考技术A LZ,你这个问题我也关注蛮久了, 因为我一直不知道线程还有这么多状态的,线程主要状态不是只有:创建-》就绪-》运行->阻塞-》终止 吗?

我是用java的,介绍下java的Thread的方法
1. sleep()方法:sleep()允许指定以毫秒为单位的一段时间作为参数,它使得线程在指定的时间内进入阻塞状态,不能得到CPU 时间,指定的时间一过,线程重新进入可执行状态。这可以理解为休眠吗?或者是阻塞?
2.yield() 方法:yield() 使得线程放弃当前分得的 CPU 时间,但是不使线程阻塞,即线程仍处于可执行状态,随时可能再次分得 CPU 时间。调用 yield() 的效果等价于调度程序认为该线程已执行了足够的时间从而转到另一个线程。
3.wait() 和 notify() 方法:两个方法配套使用,wait() 使得线程进入阻塞状态,它有两种形式,一种允许指定以毫秒为单位的一段时间作为参数,另一种没有参数,前者当对应的 notify() 被调用或者超出指定时间时线程重新进入可执行状态,后者则必须对应的 notify() 被调用。

而我自己经常用的是在run()方法里面用标识符,根据条件改变标识符的值来控制循环的运行,或者是监听某个输入条件,监听不到就一直等待在那里。

挂起我倒是在进程上听过,
就绪挂起: 进程在内存外,但只要被调入内存就可运行
等待挂起: 进程在外存中,并且等待某件事情发生
不知道这和线程是不是一样。

而阻塞,中断和休眠在java里面好像都是用sleep()来完成的,在我理解起来其实是一种状态, 但因为我的水平问题,对内存什么的没什么研究,所以我很期待有人能解答。

期待大神!
期待大神!
期待大神!
期待大神!
期待大神!
期待大神!追问

Google了下,线程的状态大致有4种(产生(new)、可执行(Runnable)、死亡(Dead)、 有停滞(Blocks))有说7种的,怎么说的都有。。大致是这样吧。昨天到今天找了一天的论坛。。没有让我满意的。。。。兄弟我刚工作,遇到了这么个棘手的问题。。。苦倒拉!!

参考资料:百度一下

参考技术B 我来说吧。
首先,别过度纠结与概念, 找些线程使用的示例程序,把各种状态处理的库函数的用法,看懂了,会用了就行了。
等你自己处理线程起来得心应手了,你对线程的理解自然就接近那些所谓写书的大神们了。

用,才能懂,光纠结与理论和概念是不行的,用的时候还是迷糊。

找例子把,或者看现成的代码。没有比这学的更块的了。

线程的状态

1、新建:线程刚被创建时的状态;
2、就绪(可运行):只要调度器把时间片分配给线程,就可以运行,不同于死亡和阻塞状态;
3、运行状态
4、阻塞:线程能够运行,但是有条件阻止它的运行,调度器忽略该线程,不会分配时间片给它,直到重新进入就绪状态;
5、死亡:从run方法返回后进入该状态,处于死亡或终止状态的线程不可调度;

以上是关于怎样检测线程的状态(c代码 )如:线程是死亡、阻塞、挂起等。的主要内容,如果未能解决你的问题,请参考以下文章

13.3 线程的生命周期

新建就绪运行阻塞死亡状态

Java多线程-线程的状态和线程常用方法

线程的状态

java中线程状态-死亡

多线程杂记