Java多線程的創建(一)


  • 方法一:繼承Thread類實現

    1.創建一個類A,並繼承Thread類

    2.重寫A的run()方法

    3.創建A的實例對象b,即創建了線程對象

    4.使用b調用start()方法:啟動線程(會自動調用run方法)


例如:

package 多線程;
/*
*1.創建兩個線程分別完成100以內奇數偶數的輸出
*/

public class CreateThread {
    public static void main(String[] args){
        Test1 t1 = new Test1();
        Test2 t2 = new Test2();
        t1.start();
        t2.start();
    }
}
//輸出偶數
class Test1 extends Thread {
    @Override
    public void run() {
        for (int i = 0; i < 50; i++) {
            if (i % 2 == 0) {
                System.out.println("線程一輸出偶數:"+i);
            }
        }
    }
}

//輸出奇數
class Test2 extends Thread{
    @Override
    public void run() {
        for(int i =0; i < 50;i++){
            if (i %2 != 0) {
                System.out.println("線程二輸出奇數:"+i);
            }
        }
    }
}
線程一輸出偶數:0
線程一輸出偶數:2
線程一輸出偶數:4
線程二輸出奇數:1
線程二輸出奇數:3
線程二輸出奇數:5
	....
線程二輸出奇數:47
線程二輸出奇數:49
線程一輸出偶數:6
線程一輸出偶數:8

輸出結果省略了一部分,可以看出來,兩個線程的執行是交替的,所以奇數和偶數也是交替輸出.


  • 方法二:實現Runnable接口

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

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

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

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

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


例如:

package 多線程;

public class CreateThread2 {
    public static void main(String[] args){
       Test3 t3 = new Test3();
       Test4 t4 = new Test4();

        //多態性
       Thread t = new Thread(t3);
       Thread tt = new Thread(t4);
       t.start();
       tt.start();
    }
}
//輸出偶數
class Test3 implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 50; i++) {
            if (i % 2 == 0) {
                System.out.println("線程一輸出偶數:"+i);
            }
        }
    }
}
//輸出奇數
class Test4 implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 50; i++) {
            if (i % 2 != 0) {
                System.out.println("線程二輸出奇數:"+i);
            }
        }
    }
}
//結果和上一個類似
  • 注意事項

    1. 如果自己手動調用run()方法,那么就只是普通方法,沒有啟動多線程模式。

    2. run()方法由JVM調用,什么時候調用,執行的過程控制都有操作系統的CPU 調度決定。

    3. 想要啟動多線程,必須調用start方法。

    4. 一個線程對象只能調用一次start()方法啟動,如果重復調用了,則將出現異常。

  • 比較兩種方法

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

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

    3.實現方式的好處:

    ​ ①避免了單繼承的局限性

    ​ ②多個線程可以共享同一個接口實現類的對象,非常適合多個相同線 程來處理同一份資源

  • 說在最后

    碼字不易,感謝支持。水平有限,難免錯漏和不准確,歡迎批評指正!


免責聲明!

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



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