Java多線程(1)-------線程的狀態和生命週期

線程的狀態和生命週期

    一個線程的完整生命週期

    ⑴.新建(創建)

     當一個Thread類或者它的子類被聲明並創建的時候,一個新的線程對象就產生了,此時該線程就處在新建狀態。現在這個線程已經被分配了內存空間以及其他所需要的資源。

    ⑵.等待&運行

      線程在新建狀態時就已經準備好運行了,只要它獲得CPU資源(JVM將CPU使用權切換給該線程),該線程就脫離主線程開始自己的生命週期。

      由於線程新建之後只是擁有內存資源,JVM並沒有管理這個線程,所以我們要調用start()方法(該方法繼承自Thread)讓JVM來管理這個線程


public class Test extends Thread {
    public static void main(String[] args) {
        Test a = new Test();//沒有調用start
        a.run();//直接調用run方法,是當前的main線程調用的,而不是我們聲明的a線程調用的
    }

    @Override
    public void run() {
        System.out.println("hello:"+currentThread().getName());
    }
}

程序運行結果

可以看到是主線程main調用的run方法,雖然我們聲明瞭新的線程類,但是還未調用start。

中斷

中斷包括4種情況

1.線程切換-----即JVM將CPU資源切換給其他線程使用

2.調用sleep()方法(也是繼承自Thread類)

當線程調用sleep(int millsecond)方法時,當前線程就會進入休眠狀態,並讓出CPU的使用權。在經過millsecond毫秒之後,線程重新進入線程隊列中等待CPU資源。

3.調用wait()方法

當前線程調用了wait()方法時,進入等待狀態。此時的線程不會主動進入線程隊列去等待CPU資源,而是一直掛起知道其他線程調用notify()或notifyAll()方法喚醒它,從而重新進入線程隊列等待CPU資源。

⑷.死亡

即線程不可再繼續運行的狀態。造成線程死亡的願意一般有兩個。1-該線程完成了所有的任務,即執行完run()方法。2-線程被強制性終止(拋出了未捕獲的異常)。可以使用isAlive()方法查看線程是否存活。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章