Java線程是Java程序的基本執行單元,線程的狀態處於不同的狀態,理解線程的執行過程和狀態是 Java 並發編程的基礎。本文將介紹Java線程狀態的概念和細節,並給出示例代碼,幫助讀者更好地理解。
一、線程狀態的概念和分類
線程有多種狀態,Java中線程狀態分為以下幾種:
- 新建(New):當線程對象創建時,狀態就是新建狀態。此時線程還沒有調用start()方法。
- 可運行(Runnable):當線程調用了start()方法,但還沒有獲取到CPU資源時,狀態就是可運行狀態。
- 運行(Running):當線程正在執行時,狀態就是運行狀態。
- 阻塞(Blocked):當線程等待某個資源時,無法運行時,線程就進入了阻塞狀態。
- 等待(Waiting):線程調用了wait()方法後,進入等待狀態。
- 超時等待(Timed Waiting):線程調用了sleep()、join()或者帶有超時參數的 wait()方法後,進入超時等待狀態。
- 終止(Terminated):當線程執行完 run()方法後,或者線程拋出未處理的異常,或者調用了stop()方法後,線程就終止了,狀態就是終止狀態。
public class ThreadStateDemo { public static void main(String args[]) { Thread thread = new Thread(new Runnable() { public void run() { while (true) { // do something } } }); System.out.println("線程狀態:" + thread.getState()); thread.start(); System.out.println("線程狀態:" + thread.getState()); } }
輸出結果如下:
線程狀態:NEW 線程狀態:RUNNABLE
從輸出結果中可以看出,當線程對象被創建時,狀態為NEW;當線程調用了start()方法後,狀態變為RUNNABLE
二、線程狀態轉換
下圖展示了線程狀態之間的轉換關係:

線程在不同狀態下的狀態轉換說明如下:
- New -> Runnable:當調用start()方法後,線程從新建狀態轉換為可運行狀態。
- Runnable -> Running:線程從可運行狀態轉換為正在運行狀態。
- Running -> Runnable:線程在運行狀態時,可能被調度器或者其他線程中斷,從運行狀態轉變為可運行狀態。
- Runnable -> Blocked:該線程等待某個操作完成或資源開放時,從可運行狀態轉變為阻塞狀態。
- Blocked -> Runnable:當線程等待的操作完成或者資源釋放時,從阻塞狀態轉變為可運行狀態。
- Runnable -> Waiting/Timed Waiting:當調用wait()/join()/sleep()方法時,線程會從可運行狀態轉變為等待狀態或超時等待狀態。
- Waiting/Timed Waiting -> Runnable:當被notify()/ notifyAll()或者指定的超時時間到達時,線程會從等待狀態或超時等待狀態轉變為可運行狀態。
- Running -> Terminated:線程運行結束或者調用stop()方法時,線程會從運行狀態變為終止狀態。
三、線程狀態的檢測
Java提供了Thread類的getState()方法,可用於獲取線程的狀態。示例如下:
public class ThreadStateDemo { public static void main(String args[]) { Thread thread = new Thread(new Runnable() { public void run() { while (true) { // do something } } }); System.out.println("線程狀態:" + thread.getState()); thread.start(); System.out.println("線程狀態:" + thread.getState()); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("線程狀態:" + thread.getState()); } }
輸出結果如下:
線程狀態:NEW 線程狀態:RUNNABLE 線程狀態:RUNNABLE
在線程執行過程中,可以通過Thread提供的方法isAlive()檢測線程是否存活。
四、總結
理解Java線程狀態的概念和細節是多線程編程的基礎知識,透徹掌握線程狀態對於正確、高效地編寫並發程序至關重要。在實際編寫、調試多線程程序時,經常使用線程狀態的檢測和判斷,以此保證線程間的同步和協調。
原創文章,作者:ZFRQ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/133176.html