怎样检测线程的状态(c代码 )如:线程是死亡、阻塞、挂起等。
发布网友
发布时间:2022-04-25 15:07
我来回答
共3个回答
热心网友
时间:2023-07-10 08:01
道线程还有这么多状态的,线程主要状态不是只有:创建-》就绪-》运行->阻塞-》终止 吗?
我是用java的,介绍下java的Thread的方法
1. sleep()方法:sleep()允许指定以毫秒为单位的一段时间作为参数,它使得线程在指定的时间内进入阻塞状态,不能得到CPU 时间,指定的时间一过,线程重新进入可执行状态。这可以理解为休眠吗?或者是阻塞?
2.yield() 方法:yield() 使得线程放弃当前分得的 CPU 时间,但是不使线程阻塞,即线程仍处于可执行状态,随时可能再次分得 CPU 时间。调用 yield() 的效果等价于调度程序认为该线程已执行了足够的时间从而转到另一个线程。
3.wait() 和 notify() 方法:两个方法配套使用,wait() 使得线程进入阻塞状态,它有两种形式,一种允许指定以毫秒为单位的一段时间作为参数,另一种没有参数,前者当对应的 notify() 被调用或者超出指定时间时线程重新进入可执行状态,后者则必须对应的 notify() 被调用。
而我自己经常用的是在run()方法里面用标识符,根据条件改变标识符的值来控制循环的运行,或者是监听某个输入条件,监听不到就一直等待在那里。
挂起我倒是在进程上听过,
就绪挂起: 进程在内存外,但只要被调入内存就可运行
等待挂起: 进程在外存中,并且等待某件事情发生
不知道这和线程是不是一样。
而阻塞,中断和休眠在java里面好像都是用sleep()来完成的,在我理解起来其实是一种状态, 但因为我的水平问题,对内存什么的没什么研究,所以我很期待有人能解答。
期待大神!
期待大神!
期待大神!
期待大神!
期待大神!
期待大神!
热心网友
时间:2023-07-10 08:02
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种的,怎么说的都有。。大致是这样吧。昨天到今天找了一天的论坛。。没有让我满意的。。。。兄弟我刚工作,遇到了这么个棘手的问题。。。苦倒拉!!
参考资料:百度一下
热心网友
时间:2023-07-10 08:02
我来说吧。
首先,别过度纠结与概念, 找些线程使用的示例程序,把各种状态处理的库函数的用法,看懂了,会用了就行了。
等你自己处理线程起来得心应手了,你对线程的理解自然就接近那些所谓写书的大神们了。
用,才能懂,光纠结与理论和概念是不行的,用的时候还是迷糊。
找例子把,或者看现成的代码。没有比这学的更块的了。