首頁  >  文章  >  Java  >  Java執行緒的五種狀態詳解及狀態轉換規則

Java執行緒的五種狀態詳解及狀態轉換規則

王林
王林原創
2024-02-19 17:03:06553瀏覽

Java執行緒的五種狀態詳解及狀態轉換規則

深入了解Java執行緒的五種狀態及其轉換規則

一、執行緒的五種狀態介紹
在Java中,執行緒的生命週期可以分為五個不同的狀態,包括新建狀態(NEW)、就緒狀態(RUNNABLE)、運作狀態(RUNNING)、阻塞狀態(BLOCKED)和終止狀態(TERMINATED)。

  1. 新建狀態(NEW):當執行緒物件建立後,它就處於新建狀態。此時,執行緒物件已經分配了足夠的資源來執行任務,但是還沒有開始執行run()方法。
  2. 就緒狀態(RUNNABLE):當執行緒呼叫了start()方法之後,執行緒會進入就緒狀態。處於就緒狀態的執行緒已經具備了執行的條件,等待CPU分配時間片段來執行程式碼。
  3. 運行狀態(RUNNING):當就緒狀態的執行緒取得到CPU時間片段後,進入運行狀態,並開始執行run()方法中的程式碼。執行緒將保持運行狀態,直到自行結束或被其他執行緒中斷。
  4. 阻塞狀態(BLOCKED):在下列情況下,執行緒會進入阻塞狀態:

    • 呼叫了sleep()方法,主動讓出了CPU資源。
    • 等待某個資源的釋放,如鎖定資源。
    • 執行緒在join()方法中等待其他執行緒的結束。
  5. 終止狀態(TERMINATED):在執行緒結束後,就進入了終止狀態。執行緒完成run()方法中的程式碼執行後,或因為例外等原因導致執行緒中止,都會使執行緒進入終止狀態。

二、狀態之間的轉換規則
線程的狀態之間存在著一定的轉換規則,下面我們分別介紹每個狀態之間的轉換規則。

  1. 新狀態(NEW)轉換為就緒狀態(RUNNABLE):當執行緒物件建立後,呼叫了start()方法,執行緒就由新建狀態轉換為就緒狀態。
  2. 就緒狀態(RUNNABLE)轉換為運作狀態(RUNNING):當執行緒取得到CPU資源後,就從就緒狀態轉換為運作狀態。
  3. 運作狀態(RUNNING)轉換為阻塞狀態(BLOCKED):執行緒在執行過程中,可能會因為等待某個資源的釋放或主動釋放CPU資源,而進入阻塞狀態。
  4. 阻塞狀態(BLOCKED)轉換為就緒狀態(RUNNABLE):當執行緒等待的資源被釋放後,或等待時間到達,就會從阻塞狀態轉換為就緒狀態。
  5. 運行狀態(RUNNING)轉換為終止狀態(TERMINATED):當執行緒的run()方法執行完成或因為例外狀況而導致執行緒中止時,執行緒會從運行狀態轉換為終止狀態。

三、程式碼範例

下面是一個簡單的程式碼範例,展示了執行緒狀態之間的轉換規則:

class MyThread extends Thread {
    
    @Override
    public void run() {
        try {
            Thread.sleep(1000);
            System.out.println("线程执行完毕");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

public class ThreadStateDemo {

    public static void main(String[] args) {
        MyThread thread = new MyThread();
        System.out.println("线程创建后状态:" + thread.getState());

        thread.start();
        System.out.println("调用start()方法后状态:" + thread.getState());

        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("等待500ms后状态:" + thread.getState());

        try {
            thread.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("调用join()方法后状态:" + thread.getState());
    }
}

運行以上程式碼,可以看到輸出結果如下:

线程创建后状态:NEW
调用start()方法后状态:RUNNABLE
等待500ms后状态:RUNNABLE
线程执行完毕
调用join()方法后状态:TERMINATED

以上程式碼建立了一個繼承自Thread類別的執行緒物件MyThread。在主線程中,我們可以觀察到線程物件在不同階段的狀態變化。

透過深入了解Java執行緒的五種狀態及其轉換規則,我們能夠更好地掌握多執行緒的原理,進一步提升並發程式設計的能力。同時,在實際開發過程中,對線程狀態的判斷和處理也是非常重要的。希望本文能對大家有幫助。

以上是Java執行緒的五種狀態詳解及狀態轉換規則的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn