1. 程式人生 > >概括的解釋下線程的幾種可用狀態。

概括的解釋下線程的幾種可用狀態。

I/O 出了 處理 同步阻塞 分享圖片 tin text 不可 再次

1、新建(new):新建一個線程對象。

2、可運行狀態(runnable):線程對象創建後,其他線程調用該對象的start()方法,該狀態的線程位於可運行線程池中,等待線程調度選中,獲取CPU使用權。

3、運行狀態(running):可運行狀態的線程獲取到了cpu時間片(timeslice),執行程序代碼。

4、阻塞(block):運行狀態的線程因為某些原因放棄了CPU的使用權,也即讓出了cpu timeslice,暫時停止運行。直到線程進入可運行狀態,才有機會再次獲得cpu timeslice轉到運行狀態。阻塞的情況分為三種:

(一)等待阻塞:運行狀態的線程對象執行了wait()方法,JVM會把該線程放入等待隊列(waitting queue)中。

(二)同步阻塞:運行狀態的線程對象要獲取同步鎖時,若該同步鎖被別的線程占用,則JVM就會把該線程放入鎖池(lock pool)中。

(三)其他阻塞:運行狀態的線程對象調用了sleep()、join()方法或者發出了I/O請求時,JVM會把該線程置為阻塞狀態。當sleep()狀態超時、join()等待線程終止或者超時、I/O處理完畢時,線程轉入可運行狀態。

5、死亡(dead):線程run()、main()方法執行結束,或者因異常退出了run()方法,則該線程結束生命周期。死亡的線程不可復生。

技術分享圖片

概括的解釋下線程的幾種可用狀態。