掌握JAVA線程運行機制是成為合格開發(fā)工程師的必經(jīng)之路,本課程通過企業(yè)級項目案例教學(xué),幫助學(xué)員透徹理解線程狀態(tài)轉(zhuǎn)換原理。
| 狀態(tài)類型 | 觸發(fā)條件 | 特性說明 |
|---|---|---|
| NEW | Thread實例化后 | 尚未啟動的初始狀態(tài),未分配系統(tǒng)資源 |
| RUNNABLE | start()方法調(diào)用 | 包含ready和running兩種子狀態(tài) |
| BLOCKED | 等待監(jiān)視器鎖 | 同步代碼塊/方法爭奪鎖失敗 |
當(dāng)線程調(diào)用wait()方法時,會立即釋放持有的對象鎖,進入WAITING狀態(tài)等待其他線程的notify/notifyAll喚醒。這種機制在生產(chǎn)者-消費者模式中具有重要應(yīng)用價值。
需特別注意RUNNABLE狀態(tài)包含就緒(ready)和執(zhí)行(running)兩種子狀態(tài),當(dāng)線程獲得CPU時間片后才會進入實際運行階段。yield()方法會使線程從running轉(zhuǎn)為ready,但并不能控制具體的調(diào)度順序。
終止狀態(tài)的線程不可通過start()方法重啟,重復(fù)調(diào)用將拋出IllegalThreadStateException異常。正確做法是創(chuàng)建新的Thread實例來實現(xiàn)線程復(fù)用需求。