Java並發包1--線程的狀態及常用方法
一、線程主要有以下幾種狀態:
new(新建):線程剛剛被創建
runnable(就緒):新建的線程執行start方法進入就緒狀態等待系統調度分配CPU,被分配了之後就進入運行中狀態
blocked(阻塞):當線程執行被鎖的代碼塊或方法時,等待其他線程釋放鎖而處於阻塞狀態
waiting(等待):線程進入等待狀態,需要等待其他線程做出一些特點動作(通知或中斷)
time_waiting(超時等待):和waiting狀態類似,不過可以在指定的時間自行結束等待
terminated(終止狀態):當線程執行run方法完成或因為異常退出時進入終止狀態
二、線程的各種狀態的流轉圖如下示:
三、線程的各種方法用法
start():線程被創建之後,執行start方法使線程進入就緒狀態,等待系統調度分配CPU來執行
run():線程執行業務邏輯,執行完成run方法裏面的內容就會進入終止狀態
yield():yield方法是讓步的意思,將當前線程狀態由“運行中”進入到“就緒狀態”,目的是讓出CPU來給其他線程來執行,但是不會釋放當前線程持有的對象鎖(讓步之後就緒的線程等待CPU執行,有可能還會執行讓步的線程)
wait():使當前線程進入等待狀態,並且釋放當前線程持有的對象鎖,直到等待的時間到了或者是其他線程執行該對象的喚醒方法,如何才可繼續進入就緒狀態等待CPU
notify():喚醒該對象監視器上等待單個線程
notifyAll():喚醒該對象監視器上等待的所有線程
sleep():使當前線程進入睡眠等待狀態,不會釋放對象鎖,睡眠時間結束重新進入就緒狀態
join():join方法會使當前線程當期執行,直到join的線程執行完成才會繼續執行。比如main方法裏面有兩個線程
t1.start();
t1.join();
t2.start();
則t1線程執行之後,再執行t1.join(),那麽此時main線程就會放棄後面的執行,直到t1線程執行結束之後才會繼續執行main線程,然後繼續執行t2線程。
Java並發包1--線程的狀態及常用方法