多線程之——線程的狀態

線程狀態

線程是相對獨立的、可調度的執行單元,因爲在線程的執行過程中,會分別處在不同的狀態。通常而言,線程主要有下列幾種運行狀態:
1. 就緒狀態:即線程已經具備了運行的狀態,等待調度程序分配CPU資源給這個線程運行(即隨時準備着搶佔CPU資源)。
2. 運行狀態:調度程序分配CPU資源給該線程,該線程正在執行(已經搶到了CPU資源)。

3. 阻塞狀態:線程正在等待某個條件符合或者某個事件發生,纔會具備運行的條件(可能正在執行sleep()方法,即休眠了)。


對線程的基本操作主要有以下5種,通過這5中操作,是線程在各個狀態之間進行轉換。

派生

派生屬於線程,可以由進程派生出線程,線程所擁有的資源將會被創建。一個線程既可以由進程派生(如派生主線程),也可以由其他線程派生(如主線程派生子線程)。在Java中,可以創建一個線程並通過調用該線程的start()方法使該線程進入就緒狀態(即處於可以搶佔CPU資源的狀態)。

  調度

調度程序分配CPU資源給就緒狀態的線程,使線程獲得CPU資源進行運行,即執行Java線程類中的run()方法裏的內容(搶到了CPU資源並已經開始執行線程)。

  阻塞

正在運行狀態的線程,在執行過程中需要等待某個條件符合或某個事件發生,此時線程進入阻塞狀態。阻塞時,寄存器上下文。程序計數器以及堆棧指針都會得到保存。

  激活

在阻塞狀態下的線程,如果需要等待的條件符合或事件發生,則該線程被激活並進入就緒狀態(隨時可以搶佔CPU資源)

  結束

在運行狀態的線程,線程執行結束,他的寄存器上下文以及對戰信息等內容將被釋放。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章