看完这篇,我感觉我对java多线程又懵逼了. 线程可能会阻塞或暂停执行,原因有多种: 等待I/O操作结束 等待获得一个锁 等待从Thread.sleep方法中醒来 等待另一个线程计算的结果 当线程阻塞时,它通常被挂起,并处于某种阻塞状态: BLOCKED.WAITING或TIMED_WAITING 阻塞操作与执行时间很长的普通操作的差别在于: 被阻塞的线程必须等待某个不受它控制的事件发生后才能继续执行,例如等待I/O操作的完成,等待某个锁变成可用,或者等待外部计算的结束. 当某个外部事件发生时,…