線程阻塞的原因,有三大類:
1.獲取鎖,得不到,就進入到等待鎖的阻塞隊列。
只有占有鎖的線程,釋放鎖時,才會喚醒這個隊列中的線程。
notify不會喚醒該隊列中的線程
2.正在占用鎖的線程,調用了wait,就進入wait阻塞隊列。
只有obj.notify()方法,才會喚醒這個隊列中的線程。
一般的釋放鎖,無法喚醒該隊列中的線程。
3.正在執行中的線程,調用了sleep()、join()或者IO,就進入了另一個阻塞隊列。
睡眠時間到,或者IO阻塞結束,線程才能得以繼續進入可運行狀態。