close

※如何啟動執行緒

●自訂執行緒:

    --繼承Thread

    --覆寫public void run

public class ThreadTest extends Thread {
    private String name;

    public ThreadTest(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        for(int i = 0;i<10;i++){
            System.out.print(name + "=" + i); 
        }
    }
}

●執行緒由作業系統控管:

public class Test0610 {
    public static void main(String[] args) {
        ThreadTest t1 = new ThreadTest("T1");
        ThreadTest t2 = new ThreadTest("T2");
        //t1.setPriority(10);     //優先較大
        //t2.setPriority(1);
        t1.start();
        t2.start();             //交錯跑,由作業系統決定
    }
}

Out:
未加優先權: T1=0 T1=1 T1=2 T2=0 T2=1 T2=2 T2=3 T2=4 T2=5 T2=6 T2=7 T2=8 T2=9 T1=3 T1=4 T1=5 T1=6 T1=7 T1=8 T1=9

有加優先權: T1=0 T1=1 T1=2 T1=3 T1=4 T1=5 T1=6 T1=7 T1=8 T1=9 T2=0 T2=1 T2=2 T2=3 T2=4 T2=5 T2=6 T2=7 T2=8 T2=9


public class ThreadTest extends Thread {
    private String name;

    public ThreadTest(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        for(int i = 0;i<10;i++){
            System.out.print(name + "=" + i); 
        }
    }
}

●執行緒由程式控管:

public class Test0610 {
    public static void main(String[] args) {
        ThreadTest t1 = new ThreadTest("T1");
        ThreadTest t2 = new ThreadTest("T2");
        try {
            t1.join();          //會先等t1跑完
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("Main Porgram Terminated");  //主程式會執行完
        t1.run();            //沒有交錯跑,由程式決定
        t2.run();
    }
}

Out:
Main Porgram Terminated
T1=0 T1=1 T1=2 T1=3 T1=4 T1=5 T1=6 T1=7 T1=8 T1=9 T2=0 T2=1 T2=2 T2=3 T2=4 T2=5 T2=6 T2=7 T2=8 T2=9


●另一種自訂執行緒的方式

    --implements Runnable

    --覆寫public void run

public class ThreadTest implements Runnable {
    private String name;

    public ThreadTest(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        for(int i = 0;i<10;i++){
            System.out.print(name + "=" + i + " "); 
        }
    }
}

●配合 Runnable Interface啟動多執行緒

        ThreadTest t1 = new ThreadTest("T1");
        ThreadTest t2 = new ThreadTest("T2");
        Thread test1 = new Thread(t1);               //Runnable沒有start,所以必須先丟到Thread裡面
        Thread test2 = new Thread(t2);
        test1.start();                                            //由作業系統控制,會交錯
        test2.start();

Out:
T1=0 T1=1 T1=2 T1=3 T1=4 T1=5 T1=6 T1=7 T1=8 T1=9 T2=0 T2=1 T2=2 T2=3 T2=4 T2=5 T2=6 T2=7 T2=8 T2=9

 

※總結:執行緒可以用 extends Thread 和 implements Runable,但在實務上,怕選錯父類別,所以還是會選擇Runable

 

arrow
arrow
    文章標籤
    執行緒 Thread Runnable
    全站熱搜

    淺翔 發表在 痞客邦 留言(0) 人氣()