2.1 線程狀態(tài)簡(jiǎn)介
在java.lang.Thread.State中能清楚的看到Java中定義了6種狀態(tài):
public enum State {
/**
* Thread state for a thread which has not yet started.
*/
NEW,
/**
* Thread state for a runnable thread. A thread in the runnable
* state is executing in the Java virtual machine but it may
* be waiting for other resources from the operating system
* such as processor.
*/
RUNNABLE,
- New:尚未啟動(dòng)的線程的線程狀態(tài)
- Runnable:可運(yùn)行的線程狀態(tài),等待CPU調(diào)度
- BLOCKED:線程阻塞等待獲取監(jiān)視器鎖的線程狀態(tài)(處于synchronized同步代碼塊或方法中被阻塞)
- WAITING:等待線程的線程狀態(tài)(不帶超時(shí)的方式:Object.wait、Thread.join、LockSupport.park)
- TIMED_WAITING:具有指定等待時(shí)間的等待線程的線程狀態(tài)。(帶超時(shí)方式:Thread.sleep、Object.wait、Thread.join、LockSupport.parkNanos、LockSupport.parkUntil)
- TERMINATED:終止線程的線程狀態(tài)。線程正常完成執(zhí)行或出現(xiàn)異常(接收到中斷指令)
2.2 線程狀態(tài)間的切換

線程間的狀態(tài)切換
2.2.1 新建-運(yùn)行-終止(示例)


運(yùn)行結(jié)果
2.2.2 新建->運(yùn)行->等待->運(yùn)行->終止(示例)


運(yùn)行結(jié)果
2.2.3 新建->運(yùn)行->阻塞->運(yùn)行->終止(示例)


運(yùn)行結(jié)果
這里主線程等待200ms的時(shí)候,主線程拿到ThreadStateSwitch的對(duì)象鎖是沒有被釋放的,在blockThreadState的方法中的同步塊運(yùn)行完之后,thread3才能拿到對(duì)象鎖。