首先看java中线程状态轮转图: A thread that is blocked waiting for a monitor lock is in this state. A thread that is waiting indefinitely for another thread to perform a particular action is in this state. 当wait,join,park方法调用时,进入waiting状态。前提是这个线程已经拥有锁了。 Thread类里有两个ParkEvent和一个Parker, 其实ParkEvent和Parker实现和功能都类似,只是源码没有重构而已。 上面提到,WAITING状态的线程,主要指调用Object,wait(),Object.join(),LockSupport.park()方法的线程操作,其中AQS的挂起,也就是调用LockSupport.park(),恢复则调用LockSupport.unPark()。AQS.Condition.await(),内部也是调用LockSupport.park(); https://giteedev.gitee.io/yyz-coder/2020/08/20/java%E4%B8%AD%E9%98%BB%E5%A1%9E%E5%92%8C%E7%AD%89%E5%BE%85%E7%8A%B6%E6%80%81%E7%9A%84%E5%8C%BA%E5%88%AB%E6%98%AF%E5%95%A5%E7%8E%A9%E6%84%8F%E5%84%BF%EF%BC%9F/

可以看到:
名称解释
阻塞(BLOCKED)
一个线程因为等待临界区的锁被阻塞产生的状态,synchronize 关键字产生的状态。等待(WAITING)
Thread
原文