线程的阻塞 中断 挂起 休眠 的区别

2024-11-30 23:20:48
推荐回答(1个)
回答1:

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

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

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

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

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

期待大神!
期待大神!
期待大神!
期待大神!
期待大神!
期待大神!