線(xiàn)程的生命周期
- 新建 :new關(guān)鍵字創(chuàng)建了一個(gè)線(xiàn)程之后萌丈,該線(xiàn)程就處于新建狀態(tài)雷则。jvm為線(xiàn)程分配內(nèi)存,初始化成員變量值乾颁。
- 就緒:當(dāng)線(xiàn)程對(duì)象調(diào)用了start()方法之后艺栈,該線(xiàn)程就處于就緒狀態(tài)。jvm為線(xiàn)程創(chuàng)建方法棧和程序計(jì)數(shù)器诅妹,等待線(xiàn)程調(diào)度器調(diào)度毅人。
- 運(yùn)行:獲得CPU資源后開(kāi)始運(yùn)行run()方法,進(jìn)入運(yùn)行狀態(tài)丈莺。
- 阻塞:當(dāng)發(fā)生如下?tīng)顩r時(shí),線(xiàn)程將會(huì)進(jìn)入阻塞狀態(tài):
- 線(xiàn)程調(diào)用sleep()方法主動(dòng)放棄所占用的處理器資源
- 線(xiàn)程調(diào)用了阻塞式IO方法弛秋,在方法返回之前俐载,線(xiàn)程處于阻塞狀態(tài)。
- 線(xiàn)程試圖獲取一個(gè)同步鎖遏佣,但該同步鎖正被其他線(xiàn)程占用状婶。
- 線(xiàn)程在等待某個(gè)通知(notify)
- 調(diào)用線(xiàn)程的suspend()方法將線(xiàn)程暫時(shí)掛起,該方法容易導(dǎo)致死鎖膛虫,應(yīng)盡量避免使用。
- 死亡:線(xiàn)程會(huì)以如下三種方式結(jié)束進(jìn)程碴倾,就術(shù)后就處于死亡狀態(tài)。
- run()或call()方法執(zhí)行完成跌榔,程序正常結(jié)束。
- 線(xiàn)程拋出一個(gè)未捕獲的Exception或Error纲刀。
- 調(diào)用stop()方法來(lái)結(jié)束該線(xiàn)程担平,該方法容易導(dǎo)致死鎖!盡量避免使用暂论!