已解决
线程状态,BLOCKED和WAITING 有什么区别
来自网友在路上 165865提问 提问时间:2023-10-28 13:36:27阅读次数: 65
最佳答案 问答题库658位专家为你答疑解惑
BLOCKED 和 WAITING 都是属于线程的阻塞等待状态。
BLOCKED
BLOCKED 状态是指线程在等待监视器锁的时候的阻塞状态。 也就是在多个线程去竞争 Synchronized 同步锁的时候,没有竞争到锁资源的 线程,会被阻塞等待,这个时候线程状态就是 BLOCKED。 在线程的整个生命周期里面,只有 Synchronized 同步锁等待才会存在这个状态。

WAITING
WAITING 状态,表示线程的等待状态,在这种状态下,线程需要等待某个线程的特定操作才会被唤醒。我们可以使用 Object.wait()、Object.join()、LockSupport.park()这些方法。 使得线程进入到 WAITING 状态,在这个状态下,必须要等待特定的方法来唤醒, 比如 Object.notify 方法可以唤醒 Object.wait()方法阻塞的线程, LockSupport.unpark()可以唤醒 LockSupport.park()方法阻塞的线程。
总结
在我看来,BLOCKED 和 WAITING 两个状态最大的区别有两个:
- BLOCKED 是锁竞争失败后被被动触发的状态,WAITING 是人为的主动触发的状态
- BLCKED 的唤醒时自动触发的,而 WAITING 状态是必须要通过特定的方法来主动唤醒
查看全文
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"线程状态,BLOCKED和WAITING 有什么区别":http://eshow365.cn/6-26829-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!