天天看點

Java>多線程>>建立多線程程式的兩種方法(建立Thread類的子類、實作Runnable接口)

 建立多線程程式的第一種方式:建立Thread類的子類 。

java.lang.Thread類:是描述線程的類,我們想要實作多線程程式,就必須繼承Thread類。

實作步驟:

  1. 建立一個Thread類的子類。
  2. 在Thread類的子類中重寫Thread類中的run方法,設定線程任務(開啟線程要做什麼?)。
  3. 建立Thread類的子類對象
  4. 調用Thread類中的方法start方法,開啟新的線程,執行run方法。

         void start() 使該線程開始執行;java 虛拟機調用線程的 run 方法。

         結果是兩個線程并行運作:目前線程(main線程)和另一個線程(建立新的線程,執行 run 方法)。

         多次啟動一個線程是非法的。特别是目前線程已經結束執行後,不能再重新啟動。

         java程式屬于搶占式排程,哪個線程的優先級高,哪個線程優先執行;同一個優先級,随機選擇一個執行

案例:

定義一個Thread類的子類:

package XianCheng.DuoThread;

//1. 建立一個Thread類的子類。
public class MyThread extends Thread{
    //2. 在Thread類的子類中重寫Thread類中的run方法,設定線程任務(開啟線程要做什麼?)。
    @Override
    public void run() {
        for (int i = 0; i < 20; i++) {
            System.out.println("run:" + i);
        }
    }
}
           

使用這個子類:

package XianCheng.DuoThread;

/*
    建立多線程程式的第一種方式:建立Thread類的子類
    java.lang.Thread類:是描述線程的類,我們想要實作多線程程式,就必須繼承Thread類。

    實作步驟:
        1. 建立一個Thread類的子類。
        2. 在Thread類的子類中重寫Thread類中的run方法,設定線程任務(開啟線程要做什麼?)。
        3. 建立Thread類的子類對象
        4. 調用Thread類中的方法start方法,開啟新的線程,執行run方法。
            void start() 使該線程開始執行;java 虛拟機調用線程的 run 方法。
            結果是兩個線程并行運作:目前線程(main線程)和另一個線程(建立新的線程,執行 run 方法)。
            多次啟動一個線程是非法的。特别是目前線程已經結束執行後,不能再重新啟動。
    java程式屬于搶占式排程,哪個線程的優先級高,哪個線程優先執行;同一個優先級,随機選擇一個執行

 */
public class Demo01Thread {
    public static void main(String[] args) {
        //3. 建立Thread類的子類對象
        MyThread mt = new MyThread();

        //4. 調用Thread類中的方法start方法,開啟新的線程,執行run方法。
        mt.start();

        for (int i = 0; i < 20; i++) {
            System.out.println("main:" + i);
        }
    }
}
           

運作結果:

java程式屬于搶占式排程,哪個線程的優先級高,哪個線程優先執行;同一個優先級,随機選擇一個執行

main:0
main:1
main:2
main:3
main:4
main:5
run:0
run:1
run:2
run:3
run:4
run:5
           

建立多線程程式的第一種方式:實作Runnable接口

java.lang.Runnable

               Runnable 接口應該由那些打算通過某一線程執行其執行個體的類來實作。類必須定義一個稱為 run 的無參數方法。

java.lang.Thread類的構造方法

               Thread(Runnable target) 配置設定新的 Thread 對象。

               Thread(Runnable target, String name) 配置設定新的 Thread 對象。

實作步驟:

  1. 建立一個Runnable接口的實作類
  2. 在實作類中重寫Runnable接口的run方法,設定線程任務
  3. 建立一個Runnable接口的實作類對象
  4. 建立Thread類對象,構造方法中傳遞Runnable接口的實作類對象
  5. 調用Thread類中的start方法,開啟新的線程執行run方法

案例:

定義一個Runnable接口的實作類:

package XianCheng.DuoThread;

//1. 建立一個Runnable接口的實作類
public class RunnableImpl implements Runnable{
    //2. 在實作類中重寫Runnable接口的run方法,設定線程任務
    @Override
    public void run() {
        for (int i = 0; i < 6; i++) {
            System.out.println(Thread.currentThread().getName() + " --> " + i);
        }
    }
}
           

使用這個類:

package XianCheng.DuoThread;

/*
    建立多線程程式的第一種方式:實作Runnable接口
    java.lang.Runnable
        Runnable 接口應該由那些打算通過某一線程執行其執行個體的類來實作。類必須定義一個稱為 run 的無參數方法。
    java.lang.Thread類的構造方法
        Thread(Runnable target) 配置設定新的 Thread 對象。
        Thread(Runnable target, String name) 配置設定新的 Thread 對象。

    實作步驟:
        1. 建立一個Runnable接口的實作類
        2. 在實作類中重寫Runnable接口的run方法,設定線程任務
        3. 建立一個Runnable接口的實作類對象
        4. 建立Thread類對象,構造方法中傳遞Runnable接口的實作類對象
        5. 調用Thread類中的start方法,開啟新的線程執行run方法
 */

public class Demo01Runnable {
    public static void main(String[] args) {
        //3. 建立一個Runnable接口的實作類對象
        RunnableImpl run = new RunnableImpl();

        //4. 建立Thread類對象,構造方法中傳遞Runnable接口的實作類對象
        Thread t = new Thread(run);

        //5. 調用Thread類中的start方法,開啟新的線程執行run方法
        t.start();

        for (int i = 0; i < 6; i++) {
            System.out.println(Thread.currentThread().getName() + " --> " + i);
        }
    }
}
           

運作結果:

java程式屬于搶占式排程,哪個線程的優先級高,哪個線程優先執行;同一個優先級,随機選擇一個執行

main --> 0
main --> 1
main --> 2
main --> 3
main --> 4
main --> 5
Thread-0 --> 0
Thread-0 --> 1
Thread-0 --> 2
Thread-0 --> 3
Thread-0 --> 4
Thread-0 --> 5
           

繼續閱讀