Java線程狀態(tài)
Java線程有六個狀態(tài),可以在Thread類中的枚舉類型State中查看。
1. NEW
當(dāng)Thread剛創(chuàng)建,并且還未調(diào)用start()方法,此時的狀態(tài)就是NEW。
2. RUNNABLE
一個RUNNABLE狀態(tài)的線程已經(jīng)運(yùn)行在JVM中,但是它可能需要等待某些操作系統(tǒng)的資源,例如CPU。
3. BLOCKED
一個BLOCKED狀態(tài)的線程正在等待獲取一個鎖,例如線程A進(jìn)入了synchronized方法,若線程B也希望進(jìn)入synchronized方法,此時線程B等待獲取鎖,進(jìn)入BLOCKED狀態(tài)。
4. WAITING
由于調(diào)用了下列沒有timeout參數(shù)的方法,線程將會進(jìn)入WAITING狀態(tài)。也就是說,WAITING狀態(tài)的線程等待另一個線程完成一個特殊的行為。
- Object.wait
- Thread.join
- LockSupport.park
5. TIME_WAITING
TIME_WAITING狀態(tài)的線程會等待一段特定的時間。當(dāng)調(diào)用下列帶timeout參數(shù)的方法時會進(jìn)入TIME_WAITING狀態(tài)。
- Thread.sleep
- Object.wait
- Thread.join
- LockSupport.parkNanos
- LockSupport.parkUntil
6. TERMINATED
當(dāng)線程完成任務(wù)后進(jìn)入TERMINATED狀態(tài)。
詳細(xì)分析可以看這篇博客Java線程狀態(tài)分析