JAVA 執行緒的不同狀態以及何時發生狀態轉換
阿新 • • 發佈:2020-08-11
1、一般情況下,會使用Thread.getState()
方法檢查執行緒 ( Thread ) 的狀態。
2、執行緒的不同狀態都定義在Thread.State
列舉中。
3、下面是執行緒的所有狀態
- NEW: 一個尚未呼叫
Thread.start()
方法啟動的新 Thread 例項。 - RUNNABLE: 一個正在執行的執行緒。它被稱為 runnable,因為在任何給定時間,它要麼正在執行要麼在等待執行緒排程。當呼叫
Thread.start()
方法時,會將一個NEW
執行緒進入RUNNABLE
狀態。 - BLOCKED: 如果正在執行的執行緒需要進入同步部分但由於另一個執行緒持有此部分的監視器而無法執行此操作,則該執行緒將被阻塞。
- WAITING: 如果執行緒等待另一個執行緒執行特定操作,則該執行緒進入此狀態。例如,一個執行緒在它持有的監視器上呼叫
Object.wait()
法時進入此狀態,或者在另一個執行緒上呼叫Thread.join()
方法也會進入此狀態。 - IMED_WAITING: 跟WAITING狀態差不多。但執行緒在呼叫
Thread.sleep()
、Object.wait()
、或Thread.join()
和其他一些方法的定時版本後進入此狀態 - TERMINATED: 當一個執行緒已經完成它的
Runnable.run()
方法的執行並終止時進入此狀態。