本人在《线程生命周期 & 中断机制》一文中提到,可以使用Thread类提供的getState()来获取线程状态,这些状态包括NEW,RUNNABLE,BLOCKED,WAITING,TIMED_WAITING,TERMINATED。而在实践中,BLOCKED似乎状态只出现在synchronized内置锁机制里。那么blocked状态是怎样一种存在?它和waiting状态的区别是什么?一切就从探究Java线程的状态开始。
需要说明的是,本系列不讨论内置锁的膨胀过程,主要研究对象是重量级锁,内置锁的优化会另开文章解析。