問題
線程有哪些狀態(tài)
答案
線程的狀態(tài)
在Java中,線程一共有六個狀態(tài),每個線程在某個時刻處于這六個狀態(tài)的其中一種.這六種狀態(tài)分別是:
NEW-線程剛被實例化出來,還沒有調用
thread.start()
方法.RUNNABLE-線程已經調用了
thread.start()
方法,但這個時候線程可能處于被CPU執(zhí)行的狀態(tài),也有可能處于等待被CPU執(zhí)行的狀態(tài),這兩種狀態(tài)都稱之為RUNNABLE狀態(tài).BLOCKED-線程調用了一個帶有鎖的方法,而此時這個鎖已經被其它線程占有,線程此時等待著其它線程釋放該鎖,這種狀態(tài)稱之為BLOCKED狀態(tài).
WAITING-線程等待其它線程執(zhí)行特定的響應,比如當線程調用
thread.wait()方法
等待其它線程喚醒,或者調用thread.join()
方法使得線程等待另外一個線程執(zhí)行完后再執(zhí)行,這些場景都屬于WAITING狀態(tài).TIMED-WAITING-和上面的
WAITING
狀態(tài)類似,只不過調用的方法多加了時間,比如thread.join(2000)
,thread.wait(2000)
.Java將Thread.sleep(5000)
也歸在這個地方,我覺得有點別扭,可以單獨再分出一種新的狀態(tài),因為該方法并不等待其它線程執(zhí)行特定操作.TERMINATED-線程完成了所需要執(zhí)行的所有方法,方法退出后,線程就處于了TERMINATED狀態(tài).