一個線程可以有四種狀態:
(1) 新(New):線程對象已經創建,但尚未啟動,所以不可運行。
(2) 可運行(Runnable):意味著一旦時間分片機制有空閒的CPU周期提供給一個線程,那個線程便可立即開始運行。因此,線程可能在、也可能不在運行當中,但一旦條件許可,沒有什麼能阻止它的運行——它既沒有“死”掉,也未被“堵塞”。
(3) 死(Dead):從自己的run()方法中返回後,一個線程便已“死”掉。亦可調用stop()令其死掉,但會產生一個違例——屬於Error的一個子類(也就是說,我們通常不捕獲它)。記住一個違例的“擲”出應當是一個特殊事件,而不是正常程序運行的一部分。所以不建議你使用stop()(在Java 1.2則是堅決反對)。另外還有一個destroy()方法(它永遠不會實現),應該盡可能地避免調用它,因為它非常武斷,根本不會解除對象的鎖定。
(4) 堵塞(Blocked):線程可以運行,但有某種東西阻礙了它。若線程處於堵塞狀態,調度機制可以簡單地跳過它,不給它分配任何CPU時間。除非線程再次進入“可運行”狀態,否則不會采取任何操作。