java线程中含有waiting与blocked两种状态,两种状态有着明显的区别,本文从jdk源码中两种状态的设计角度和状态进入角度来分析两者的区别。
源码分析
处于blocked状态的线程等待获取监视器锁以期进入同步代码块/方法中,文档中的在调用Object.wait()方法后重入同步代码块/方法
不是很理解。
档介绍了导致线程进入Wating状态的原因以及如何退出Wating状态。
区别
线程可以通过notify,joinLockSupport.park方式进入wating状态,进入wating状态的线程等待唤醒(notify或notifyAll)才有机会获取cpu的时间片段来继续执行。
线程的 blocked状态往往是无法进入同步方法/代码块来完成的。这是因为无法获取到与同步方法/代码块相关联的锁