線程的各個狀態之間如何轉換
、
一、就緒狀態
1.調用start方法,線程進入就緒狀態
2.阻塞狀態解除,例如join方法或者sleep方法,nodify方法執行後,線程從阻塞狀態進入到就緒狀態
3.從運行狀態轉換到就緒狀態:調用yield方法
4.jvm本身從本地線程切換到其他線程,則本地線程進入就緒狀態
二、運行狀態
強調:運行狀態一定是從就緒狀態通過調度進入到運行狀態,具體如何進入到運行狀態取決於cpu的調度
三、阻塞狀態
強調:一定是從運行狀態進入到阻塞狀態
1.調用sleep方法從運行狀態進入到阻塞狀態
2.調用wait方法進入到阻塞狀態
3.調用join方法進入到阻塞狀態
4.IO流的read方法和write方法也會讓線程進入到阻塞狀態,等待操作系統對IO流的調度後繼續執行(所以後續有了NIO的出現)
四、死亡狀態
1.調用stop方法(不推薦使用)
2.調用destroy方法
3.線程執行完run方法後,被回收