02_線程的創建和啟動_繼承Thread方式


【簡述】

java使用Thread類代表線程,所有的線程都必須是Thread或者其子類的實例。

每個線程的任務就是完成一定的任務,實際上就是執行一段程序流。

 

【創建並啟動多線程的步驟(集成Thread類方式)】

1.定義繼承Thread類的子類,重寫run方法:run()方法就代表了線程需要完成的任務,故run()方法稱為:線程執行體。

2.創建線程對象:即創建Thread子類的實例。

3.啟動線程:調用線程對象的start()方法來。

 

【示例代碼FirstThread.java】

package com.Higgin.part01;

//1.1定義繼承Thread類的子類FirstThread
class FirstThread extends Thread{
    //1.2重寫run方法
    public void run(){
        for(int i=0;i<10;i++){
            //注意:當線程繼承Thread類時,直接使用this.getName()即可獲得當前線程的名字
            System.out.println(this.getName()+"===="+i);
        }
    }
}


public class Demo1{

    public static void main(String[] args) {
        //2.創建線程對象
        FirstThread t1=new FirstThread();
        //3.啟動線程
        t1.start();
        //2.創建線程對象
        FirstThread t2=new FirstThread();
        //3.啟動線程
        t2.start();
        
        for(int i=0;i<10;i++){
            //調用Thread.currentThrad().getName()可獲得當前線程的名字
            System.out.println(Thread.currentThread().getName()+"===="+i);
        }
    }
}

 【注意!!!】

啟動線程使用 start()方法,不是run()方法!!永遠不要調用線程對象的run()方法!!!

調用start()方法,系統會把run()方法當成線程執行體來處理。

直接調用run()方法,則run()方法會立即被執行,系統會把線程對象當成一個普通對象來處理,run()方法也變成了一個普通的方法

 另外,直接調用線程對象的run()方法,則run()方法內不能通過getName()來獲得當前執行線程的名字,而是需要使用Thread.currentThread先獲得當前線程,再調用線程的getName()方法來獲得線程的名字。

另外,調用了線程的run()方法之后,該線程已經不再處於新建狀態,不要再次調用線程對象的start()方法,只能對處於新建狀態的線程調用start()方法,否則會引發IllegalThreadStateException異常。

 

 

【運行結果】

 

【注意一:主線程勿忘】

 java程序開始運行時,程序至少會創建一個主線程,不要忘記了,本例中的main()方法的方法體就是主線程的線程執行體。

【注意二:兩個讀取線程名字的方法的區別】

1. Thread.currentThread():currentThread()是Thread類的靜態方法,該方法是獲取當前正在執行的線程的線程對象

2.getName():該方法是Thread類的實例方法,該方法返回調用該方法的線程的名字

【注意三:關於線程名字】

1.默認情況下,主線程的名字是main,用戶啟動的線程名字依次是:Thread-0、Thread-1......

2.當然,可以通過setName(String name)來設置對應的線程的名字。


免責聲明!

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



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