java线程四种状态
一個線程可以有四種狀態(tài):
1、新(new), 即線程剛剛創(chuàng)建,而并未執(zhí)行
2、可運(yùn)行(runnable),意味著一旦時間分片機(jī)制有空閑的CPU周期提供給一個線程,那個線程便可立即開始運(yùn)行。因此,線程可能在、也可能不在運(yùn)行當(dāng)中,但一旦條件許可,沒有什么能阻止它的運(yùn)行——它既沒有“死”掉,也未被“堵塞”。
3、Dead,從自己的run()方法中返回后,一個線程便已“死”掉。亦可調(diào)用 stop()令其死掉,但會產(chǎn)生一個違例——屬于Error的一個子類(也就是說,我們通常不捕獲它)。記住一個違例的“擲”出應(yīng)當(dāng)是一個特殊事件,而不是正常程序運(yùn)行的一部分。所以不建議你使用stop()(在Java 1.2 則是堅決反對)。另外還有一個destroy()方法(它永遠(yuǎn)不會實現(xiàn)),應(yīng)該盡可能地避免調(diào)用它,因為它非常武斷,根本不會解除對象的鎖定。
4、阻塞(Blocked),線程可以運(yùn)行,但有某種東西阻礙了它。若線程處于堵塞狀態(tài),調(diào)度機(jī)制可以簡單地跳過它,不給它分配任何CPU時間。除非線程再次進(jìn)入“可運(yùn)行”狀態(tài),否則不會采取任何操作。為什么會阻塞呢,原因有:
(1)調(diào)用sleep(毫秒數(shù)),使線程進(jìn)入“睡眠”狀態(tài)。在規(guī)定的時間內(nèi),這個線程是不會運(yùn)行的。?
(2)用suspend()暫停了線程的執(zhí)行。除非線程收到 resume()消息,否則不會返回“可運(yùn)行”狀態(tài)。?
(3)用wait()暫停了線程的執(zhí)行。除非線程收到 nofify()或者notifyAll()消息,否則不會變成“可運(yùn)行”
(4)線程正在等候一些 IO(輸入輸出)操作完成。
(5)線程試圖調(diào)用另一個對象的“同步”方法,但那個對象處于鎖定狀態(tài),暫時無法使用。
轉(zhuǎn)載于:https://www.cnblogs.com/orlion/p/4901311.html
總結(jié)
以上是生活随笔為你收集整理的java线程四种状态的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 函数式 vs 指令式
- 下一篇: js获取url中的参数值