線程:生命周期、實現方式、start()和run()的區別!


1.線程的生命周期

要想實現多線程,必須在主線程中創建新的線程對象。Java語言使用Thread類及其子類的對象來表示線程,在它的

一個完整的生命周期中通常要經歷如下的五種狀態:
 新建:當一個Thread類或其子類的對象被聲明並創建時,新生的線程對象處於新建狀態
 就緒:處於新建狀態的線程被start()后,將進入線程隊列等待CPU時間片,此時它已具備了運行的條件
 運行:當就緒的線程被調度並獲得處理器資源時,便進入運行狀態,run()方法定義了線程的操作和功能
 阻塞:在某種特殊情況下,被人為掛起或執行輸入輸出操作時,讓出CPU並臨時中止自己的執行,進入阻塞狀態
 死亡:線程完成了它的全部工作或線程被提前強制性地中止 

2.創建線程的兩種方式
(1)繼承Thread類

    1) 定義子類繼承Thread類。

    2) 子類中重寫Thread類中的run方法。

    3) 創建Thread子類對象,即創建了線程對象。

    4) 調用線程對象start方法:啟動線程,調用run方法。

(2)實現Runnable接口

    1)定義子類,實現Runnable接口。

    2)子類中重寫Runnable接口中的run方法。

    3)通過Thread類含參構造器創建線程對象。

    4)將Runnable接口的子類對象作為實際參數傳遞給Thread類的構造方法中。

    5)調用Thread類的start方法:開啟線程,調用Runnable子類接口的run方法。

兩種實現方式的區別:

    ①繼承Thread:  線程代碼存放Thread子類run方法中。

    ②實現Runnable:線程代碼存在接口的子類的run方法。

3.多線程程序的優點

    1.提高應用程序的響應。對圖形化界面更有意義,可增強用戶體驗。
    2.提高計算機系統CPU的利用率
    3.改善程序結構。將既長又復雜的進程分為多個線程,獨立運行,利於理解和修改

4.線程中run()和start()的區別

    1.run();  只是調用了一個普通方法,並沒有啟動另一個線程,程序還是會按照順序執行相應的代碼。

    2.start();  則表示,重新開啟一個線程,不必等待其他線程運行完,只要得到cup就可以運行該線程。

  比如:

<pre name="code" class="java">public class demo1 {
	public static void main(String args[]) {  
        Thread t = new Thread() {  
            public void run() {  
                pong();  
            }  
        };  
        t.start();  
//        t.run();
        System.out.print("ping");  
    }  
    static void pong() {  
        System.out.print("pong");  
    }
}

結果:

pingpong

  

public class demo2 {
	public static void main(String args[]) {  
        Thread t = new Thread() {  
            public void run() {  
                pong();  
            }  
        };  
 //       t.start();  
          t.run();
        System.out.print("ping");  
    }  
    static void pong() {  
        System.out.print("pong");  
    }
}

結果是:

pongping

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM