Java線程在運行的生命週期中可能處於6種狀態,每個確定時刻,線程只可能處於一種狀態,6種狀態如下:
1)NEW:初始狀態,線程被構建,但是還沒有執行start()方法。
2)RUNNABLE:運行狀態,Java線程將操作系統中的就緒和運行兩種狀態統稱爲“運行中”。
3)BLOCKED:阻塞狀態,表示線程阻塞於鎖。
4)WAITING:等待狀態,需要其他線程喚醒或者做出一些特性動作(通知或中斷)。
5)TIMED_WAITING:超時等待狀態,可以在指定時間內返回。
6)TERMINATED:終止狀態,表示當前線程已經執行完畢。
各狀態直接的切換方法如下:
1)NEW -> RUNNABLE :Thread.start();
2)RUNBABLE中 RUNNING -> READY:yield();
3)RUNNABLE -> WAITING:Object.wait();Object.join();LockSupport.park(Thread);
4)WAITING -> RUNNABLE:Object.notify();Object.notifyAll();LockSupport.unpark(Thread);
5)RUNNABLE -> TIMED_WAITING:Thread.sleep(long);Object.wait(long);Thread.join(long);LockSupport.parkNanos();LockSupport.parkUntil();
6)TIMED_WAITING -> RUNNABLE:Object.notify();Object.notifyAll();LockSupport.unpark(Thread);
7)RUNNABLE -> BLOCKED:進入Synchronized方法/塊
8)BLOCKED -> RUNNABLE:獲取到鎖