java線程四種狀態


一個線程可以有四種狀態:

1、新(new), 即線程剛剛創建,而並未執行

2、可運行(runnable),意味着一旦時間分片機制有空閑的CPU周期提供給一個線程,那個線程便可立即開始運行。因此,線程可能在、也可能不在運行當中,但一旦條件許可,沒有什么能阻止它的運行——它既沒有“死”掉,也未被“堵塞”。

3、Dead,從自己的run()方法中返回后,一個線程便已“死”掉。亦可調用 stop()令其死掉,但會產生一個違例——屬於Error的一個子類(也就是說,我們通常不捕獲它)。記住一個違例的“擲”出應當是一個特殊事件,而不是正常程序運行的一部分。所以不建議你使用stop()(在Java 1.2 則是堅決反對)。另外還有一個destroy()方法(它永遠不會實現),應該盡可能地避免調用它,因為它非常武斷,根本不會解除對象的鎖定。

4、阻塞(Blocked),線程可以運行,但有某種東西阻礙了它。若線程處於堵塞狀態,調度機制可以簡單地跳過它,不給它分配任何CPU時間。除非線程再次進入“可運行”狀態,否則不會采取任何操作。為什么會阻塞呢,原因有:
  (1)調用sleep(毫秒數),使線程進入“睡眠”狀態。在規定的時間內,這個線程是不會運行的。 

  (2)用suspend()暫停了線程的執行。除非線程收到 resume()消息,否則不會返回“可運行”狀態。 

  (3)用wait()暫停了線程的執行。除非線程收到 nofify()或者notifyAll()消息,否則不會變成“可運行”

  (4)線程正在等候一些 IO(輸入輸出)操作完成。

  (5)線程試圖調用另一個對象的“同步”方法,但那個對象處於鎖定狀態,暫時無法使用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM