Android-創建啟動線程的兩種方式


方式一:成為Thread的子類,然后在Thread的子類.start

    缺點:存在耦合度(因為線程任務run方法里面的業務邏輯 和 線程啟動耦合了)

    缺點:Cat extends Thread {} 后無法在繼承其他的類了

    注意:⚠️ Cat一旦繼承Thread,Cat就屬於線程對象

示例:

package android.java.thread04;

/**
 * 定義線程的第一種方式 成為Thread的子類
 */
class Cat extends Thread {

    @Override
    public void run() {
        super.run();
        for (int i = 0; i < 10; i++) {
            System.out.println("第 " + (i + 1) + " 次喵🐱");
        }
    }
}

public class ThreadTest {

    public static void main(String[] args) {

        // 第一種方式 然后在Thread的子類.start
        new Cat().start();
    }

}

執行的結果日志打印:

 


 

 

方式二:成為Runnable的實現類 由於Thread類可以指定執行Runnable接口實現類,所以把Runnable實現類傳遞給Thread類,Thread類.start

       優點:第一種方式存在耦合度,第二種方式就解耦了,因為線程任務run方法里面的業務邏輯 和 線程啟動分離了)

     Runnable實現類

       new Thread().start();

     new Thread(傳遞Runnable實現類).start();

       

     優點:Cat implements Runnable {} 后 還可以繼承其他的類了

      

    注意:⚠️ Cat一旦實現了Runnable接口,Cat只屬於Runnable實現類,不屬於線程,千萬不要以為此Cat是線程,不過此Cat可以被Thread去執行任務

    注意 Thread才是線程

示例:     

package android.java.thread05;

/**
 * 定義線程的第二種方式 成為Runnable的實現類
 */
class Cat implements Runnable {

    @Override
    public void run() {
        for (int i = 0; i < 8; i++) {
            System.out.println("第 " + (i + 1) + " 次喵🐱");
        }
    }
}

public class ThreadTest {

    public static void main(String[] args) {

        // 第二種方式 由於Thread類可以指定執行Runnable接口實現類,所以把Runnable實現類傳遞給Thread類,Thread類.start
        // new Thread(傳遞Runnable實現類).start();
        new Thread(new Cat()).start();
    }

}

 

執行的結果打印:

 


免責聲明!

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



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