1. 程式人生 > >Java並發包1--線程的狀態及常用方法

Java並發包1--線程的狀態及常用方法

常用 特點 join 邏輯 wid new runnable 行業 中斷

一、線程主要有以下幾種狀態:

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--線程的狀態及常用方法