您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關java中的線程狀態有幾種,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
線程的狀態
線程有如下6種狀態:
New
(新創建 )
Runnable
(可運行)
Blocked
(被阻塞)
Waiting
(等待)
Timed waiting
(計時等待)
Terminated
(被終止)
其中,要獲取一個線程當前的狀態,可以調用getState 方法。
下面,對每種狀態進行解釋
1.新創建線程(New)
當我們使用new操作符來創建了一個線程時,如使用new Thread(r)時,線程還未開始運行,線程中的代碼也沒有開始執行,此時就成為New狀態。
2.可運行線程(Runnable)
當我們對一個線程執行start()方法后,就會啟動該線程。但是注意,一個處于可運行狀態的線程可能正在運行也可能沒有運行,這時取決于操作系統的時間片調度。搶占式調度系統會給每一個線程分配一個時間片來運行,在時間片使用完后,操作系統就會剝奪它運行的權力,并更根據優先級選擇下一個要運行的線程。
3.被阻塞、等待狀態(Blocked、waiting、Timed waiting)
當一個線程處于阻塞和等待狀態時,它不做任何工作,也不執行任何代碼。直到操作系統重新激活它。
當一個線程試圖獲取一個內部對象鎖,而這個鎖又被其它線程持有時,該線程就進入阻塞狀態,當其它線程釋放這個鎖后,并且線程調度器允許該線程持有它時,該線程將會變成非阻塞狀態。
當線程等待另一個線程通知調度器一個條件時,它自己就進入等待狀態,再調用Object.wait方法或者Thread.join方法時,就會出現這種情況。被阻塞狀態和等待狀態時大有不同的。
有幾個方法有一個超時參數。調用它們導致線程進入計時等待狀態這一狀態將一直保存到超時期滿或者接收到適當的通知。帶有超時參數的方法有:Thread.sleep
和 Object.wait
、Thread.join
、 Lock,tryLock
以及 Condition.await
的計時版。
4.被終止的線程
線程終止有兩種原因:
因為run()方法執行完畢正常退出
因為一個沒有捕獲的異常而終止了run方法導致意外死亡
5.總結
看完上述內容,你們對java中的線程狀態有進一步的了解嗎?如果還想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。