線程的狀態(tài)

在Java的線程中,明確規(guī)定了6種狀態(tài):NEW,RUNNABLE,BLOCKED,WAITING,TIMED_WAITING,TERMINATED。

  • 對于第一種狀態(tài),是剛剛使用new Thread()方法創(chuàng)建的線程,還沒有調(diào)用start()方法;

  • 第二種狀態(tài)RUNNABLE,是可以運(yùn)行的狀態(tài),可以是在正在運(yùn)行的狀態(tài),也可以是因?yàn)镃PU調(diào)度沒有運(yùn)行的狀態(tài)(即Ready狀態(tài));

  • 第三種狀態(tài)是被阻塞的狀態(tài),這種狀態(tài)的線程一般是在等待一個鎖,來進(jìn)入一個synchronized的block/method;

  • 第四種狀態(tài)WAITING,出現(xiàn)的原因是調(diào)用了不帶時間參數(shù)的Object.wait()方法、Thread.join()方法或者LockSupport.park()方法。調(diào)用wait()的線程要用Object.notify()/notifyAll()來喚醒,調(diào)用join()方法的線程需要等待某個其他線程中斷或結(jié)束;

  • 第五種狀態(tài)TIMED_WAITING,出現(xiàn)的原因是調(diào)用了帶時間參數(shù)的Thread.sleep()、Object.wait()方法、Thread.join()方法或者LockSupport.park()方法;

  • 第六種狀態(tài)就是中斷狀態(tài),也就意味著該線程已經(jīng)執(zhí)行完畢了。

join方法,當(dāng)B線程中調(diào)用了A線程的join()方法,那么B線程要等到A線程執(zhí)行結(jié)束或者等待了timeout時間才可以繼續(xù)執(zhí)行join()方法后面的步驟。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容