廣州總校區(qū)切換校區(qū)
復(fù)制成功
微信號(hào):togogoi
添加微信好友, 詳細(xì)了解課程
已復(fù)制成功,如果自動(dòng)跳轉(zhuǎn)微信失敗,請(qǐng)前往微信添加好友
打開(kāi)微信
圖片

行業(yè)新聞

Java線程的狀態(tài)

發(fā)布時(shí)間: 2023-04-18

每個(gè)Java程序都有一個(gè)默認(rèn)的主線程,對(duì)于Java程序來(lái)說(shuō),主線程是執(zhí)行main()方法的線索,對(duì)于Applet程序來(lái)說(shuō),主線程是指導(dǎo)瀏覽器加載和執(zhí)行Java Applet程序的線索。為了實(shí)現(xiàn)多線程,必須在主線程中創(chuàng)建一個(gè)新的線程對(duì)象。任何線程一般有五種狀態(tài),即創(chuàng)建、準(zhǔn)備、運(yùn)行、阻塞和終止。?

1、新生狀態(tài)

在程序中用構(gòu)造方法(new操作符)創(chuàng)建一個(gè)新線程時(shí),如new Thread(r),該線程就是創(chuàng)建狀態(tài),此時(shí)它已經(jīng)有了相應(yīng)的內(nèi)存空間和其它資源,但是還沒(méi)有開(kāi)始執(zhí)行。

2、就緒狀態(tài)

新建線程對(duì)象后,調(diào)用該線程的 start()方法就可以啟動(dòng)線程。當(dāng)線程啟動(dòng)時(shí),線程進(jìn)入就緒狀態(tài)(runnable)。由于還沒(méi)有分配CPU,線程將進(jìn)入線程隊(duì)列排隊(duì),等待 CPU 服務(wù),這表明它已經(jīng)具備了運(yùn)行條件。當(dāng)系統(tǒng)挑選一個(gè)等待執(zhí)行的Thread對(duì)象后,它就會(huì)從等待執(zhí)行狀態(tài)進(jìn)入執(zhí)行狀態(tài)。系統(tǒng)挑選的動(dòng)作稱之為“CPU調(diào)度"。一旦獲得CPU線程就進(jìn)入運(yùn)行狀態(tài)并自動(dòng)調(diào)用自己的run方法。

3、運(yùn)行狀態(tài)

當(dāng)就緒狀態(tài)的線程被調(diào)用并獲得處理器資源時(shí),線程就進(jìn)入了運(yùn)行狀態(tài)。此時(shí),自動(dòng)調(diào)用該線程對(duì)象的 run()方法。 run()方法定義了該線程的操作和功能。運(yùn)行狀態(tài)中的線程執(zhí)行自己的run方法中代碼。直到調(diào)用其他方法或者發(fā)生阻塞而終止。

4、阻塞狀態(tài)

一個(gè)正在執(zhí)行的線程在某些特殊情況下,如被人為掛起或需要執(zhí)行耗時(shí)的輸入輸出操作時(shí),將讓出 CPU 并暫時(shí)中止自己的執(zhí)行,進(jìn)入堵塞狀態(tài)。在可執(zhí)行狀態(tài)下,如果調(diào)用 sleep()、 suspend()、 wait()等方法,線程都將進(jìn)入堵塞狀態(tài)。堵塞時(shí),線程不能進(jìn)入排隊(duì)隊(duì)列,只有當(dāng)引起堵塞的原因被消除后,線程轉(zhuǎn)入就緒狀態(tài)。重新到就緒隊(duì)列中排隊(duì)等待,這時(shí)被CPU調(diào)度選中后會(huì)從原來(lái)停止的位置開(kāi)始繼續(xù)執(zhí)行。

記?。鹤枞幌笫腔氐骄途w狀態(tài),不是運(yùn)行狀態(tài)。

5、死亡狀態(tài)

線程調(diào)用 stop()方法、destory()方法或 run()方法執(zhí)行結(jié)束后,線程即處于死亡狀態(tài)。處于死亡狀態(tài)的線程不具有繼續(xù)運(yùn)行的能力。

不推薦使用stop()方法【會(huì)產(chǎn)生異常】  destory()方法【destory是強(qiáng)制終止,不會(huì)釋放鎖】

上一篇: 什么是RDD

下一篇: 內(nèi)存泄漏是什么

<
在線咨詢 ×

您好,請(qǐng)問(wèn)有什么可以幫您?我們將竭誠(chéng)提供最優(yōu)質(zhì)服務(wù)!