線程作爲一個程序最基本的組成部分,在Java中存在好幾種狀態
- NEW: 一個剛創建出來的線程處於該狀態下,由於只有剛剛被創建的時候可能處於該狀態,所以該狀態只能被存在一次
- RUNNABLE: 複合狀態,包含READY和RUNNING
- READY:該狀態的線程可以被JVM的線程調度器進行調度讓處於RUNNING狀態
- RUNNING:表示處於該狀態的線程正在運行
調用方法舉例: - Thread.yield()調用會將對應線程從RUNNING->READY
- BLOCKED: 一個線程發起一個阻塞I/O操作後,或者試圖去獲得一個由其他線程持有鎖時候,相對應的線程會處於該狀態,處於該狀態的線程不會佔用CPU資源
- WAITING:一個線程執行了某些方法調用之後就會處於這種無限等待的狀態
- 調用方法使得線程變更WAITING方法:
- Object.wait()
- Thread.join()
- LockSupport.park()
- 將WAITING方法變成RUNNABLE:
- Object.notify()
- Object.notifyAll()
- LockSupport.unpark(thread)
- 調用方法使得線程變更WAITING方法:
- TIMED_WAITING:和WAITING類似,有限時間的等待
- TERMINATED: 已經執行結束的線程處於該狀態。