天天看點

Java并發-線程基礎

線程在一定條件下,狀态會發生變化。線程一共有以下幾種狀态:

1、建立狀态(New):新建立了一個線程對象。

2、就緒狀态(Runnable):線程對象建立後,其他線程調用了該對象的start()方法。該狀态的線程位于“可運作線程池”中,變得可運作,隻等待擷取CPU的使用權。即在就緒狀态的程序除CPU之外,其它的運作所需資源都已全部獲得。

3、運作狀态(Running):就緒狀态的線程擷取了CPU,執行程式代碼。

4、阻塞狀态(Blocked):阻塞狀态是線程因為某種原因放棄CPU使用權,暫時停止運作。直到線程進入就緒狀态,才有機會轉到運作狀态。

阻塞的情況分三種:

(1)、等待阻塞:運作的線程執行wait()方法,該線程會釋放占用的所有資源,JVM會把該線程放入“等待池”中。進入這個狀态後,是不能自動喚醒的,必須依靠其他線程調用notify()或notifyAll()方法才能被喚醒,

(2)、同步阻塞:運作的線程在擷取對象的同步鎖時,若該同步鎖被别的線程占用,則JVM會把該線程放入“鎖池”中。

(3)、其他阻塞:運作的線程執行sleep()或join()方法,或者發出了I/O請求時,JVM會把該線程置為阻塞狀态。當sleep()狀态逾時、join()等待線程終止或者逾時、或者I/O處理完畢時,線程重新轉入就緒狀态。

5、死亡狀态(Dead):線程執行完了或者因異常退出了run()方法,該線程結束生命周期。

繼續閱讀