如何通过等待JVM处理的对象锁来导致线程处于阻塞状态
我已经看到线程可以通过不同的方式进入阻塞状态。我很想知道线程处于阻塞状态后到底发生了什么。它如何回到运行状态。如果它被睡眠(时间)阻止,那么它会在毫秒之后移动到可运行队列。如果它在I / O操作上被阻塞,那么一旦完成它就会进入可运行队列。
它在等待对象锁时如何到达可运行队列。它是如何知道它等待的对象的锁定现在可用。有人还可以解释I / O上被阻塞线程如何工作的内部结构。
如果我对上述任何主题的理解不正确,请纠正我。
谢谢
没有找到相关结果
已邀请:
3 个回复
抵浮细
块而导致线程被阻塞,则当另一个线程(持有锁定)通过退出同一对象的
块释放锁定时,线程将自动标记为可运行。 如果当前线程由于调用
而被阻塞,则当另一个线程调用
时线程被“释放”。 在字节码级别上,它看起来如下:
如果其他人已经持有
的锁,则线程将挂在
,直到另一个线程调用
。 JLS没有规定如何实施
和
的确切细节。也就是说,它依赖于JVM / OS。 有关更多详细信息,请参阅JLS等待集和通知。
蓄荣糖些
线程2:
通常,您应该记住Thread.sleep()持有对资源的锁定,但Thread.wait()释放锁定并且可以被其他线程通知。
款去芳尾脊