今天就跟大家聊聊有關(guān)java中的線程狀態(tài)有幾種,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
成都創(chuàng)新互聯(lián)是一家專業(yè)提供茂名企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站建設(shè)、成都網(wǎng)站制作、HTML5建站、小程序制作等業(yè)務(wù)。10年已為茂名眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進(jìn)行中。
線程的狀態(tài)
線程有如下6種狀態(tài):
New
(新創(chuàng)建 )
Runnable
(可運(yùn)行)
Blocked
(被阻塞)
Waiting
(等待)
Timed waiting
(計(jì)時(shí)等待)
Terminated
(被終止)
其中,要獲取一個(gè)線程當(dāng)前的狀態(tài),可以調(diào)用getState 方法。
下面,對(duì)每種狀態(tài)進(jìn)行解釋
1.新創(chuàng)建線程(New)
當(dāng)我們使用new操作符來(lái)創(chuàng)建了一個(gè)線程時(shí),如使用new Thread(r)時(shí),線程還未開始運(yùn)行,線程中的代碼也沒有開始執(zhí)行,此時(shí)就成為New狀態(tài)。
2.可運(yùn)行線程(Runnable)
當(dāng)我們對(duì)一個(gè)線程執(zhí)行start()方法后,就會(huì)啟動(dòng)該線程。但是注意,一個(gè)處于可運(yùn)行狀態(tài)的線程可能正在運(yùn)行也可能沒有運(yùn)行,這時(shí)取決于操作系統(tǒng)的時(shí)間片調(diào)度。搶占式調(diào)度系統(tǒng)會(huì)給每一個(gè)線程分配一個(gè)時(shí)間片來(lái)運(yùn)行,在時(shí)間片使用完后,操作系統(tǒng)就會(huì)剝奪它運(yùn)行的權(quán)力,并更根據(jù)優(yōu)先級(jí)選擇下一個(gè)要運(yùn)行的線程。
3.被阻塞、等待狀態(tài)(Blocked、waiting、Timed waiting)
當(dāng)一個(gè)線程處于阻塞和等待狀態(tài)時(shí),它不做任何工作,也不執(zhí)行任何代碼。直到操作系統(tǒng)重新激活它。
當(dāng)一個(gè)線程試圖獲取一個(gè)內(nèi)部對(duì)象鎖,而這個(gè)鎖又被其它線程持有時(shí),該線程就進(jìn)入阻塞狀態(tài),當(dāng)其它線程釋放這個(gè)鎖后,并且線程調(diào)度器允許該線程持有它時(shí),該線程將會(huì)變成非阻塞狀態(tài)。
當(dāng)線程等待另一個(gè)線程通知調(diào)度器一個(gè)條件時(shí),它自己就進(jìn)入等待狀態(tài),再調(diào)用Object.wait方法或者Thread.join方法時(shí),就會(huì)出現(xiàn)這種情況。被阻塞狀態(tài)和等待狀態(tài)時(shí)大有不同的。
有幾個(gè)方法有一個(gè)超時(shí)參數(shù)。調(diào)用它們導(dǎo)致線程進(jìn)入計(jì)時(shí)等待狀態(tài)這一狀態(tài)將一直保存到超時(shí)期滿或者接收到適當(dāng)?shù)耐ㄖ?。帶有超時(shí)參數(shù)的方法有:Thread.sleep
和 Object.wait
、Thread.join
、 Lock,tryLock
以及 Condition.await
的計(jì)時(shí)版。
4.被終止的線程
線程終止有兩種原因:
因?yàn)閞un()方法執(zhí)行完畢正常退出
因?yàn)橐粋€(gè)沒有捕獲的異常而終止了run方法導(dǎo)致意外死亡
5.總結(jié)
看完上述內(nèi)容,你們對(duì)java中的線程狀態(tài)有進(jìn)一步的了解嗎?如果還想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀。