Java建立Thread的方式有兩種,一是實作Runnable
介面,二是繼承Thread
類別。
範例一,實作Runnable
介面。RunnableA
及RunnableB
類別皆繼承了Runnable
介面,而Runnable
物件可成為建構Thread
物件的參數。
Runnable
介面只有一個方法run()
必須被覆寫,當執行緒開始執行後便會去執行run()
,所以每一條執行緒要執行的程式碼就寫在子類別覆寫的run()
方法中。
// 範例一
public class RunnableA implements Runnable {
@Override
public void run() {
System.out.println("執行緒a");
}
}
// 範例一
public class RunnableB implements Runnable {
@Override
public void run() {
System.out.println("執行緒b");
}
}
測試。將Runnable
物件傳入Thread
建構子來建立Thread
物件a
及b
,然後呼叫Thread.start()
方法開始執行執行緒。
// 範例一
public class Test {
public static void main(String[] args) {
Thread a = new Thread(new RunnableA()); //建立Thread物件a
Thread b = new Thread(new RunnableB()); //建立Thread物件b
a.start(); // 開始執行緒a
b.start(); // 開始執行緒b
System.out.println("執行緒main");
}
}
執行結果如下。
執行緒a
執行緒main
執行緒b
範例一中共有三個執行緒,分別是執行緒a,執行緒b,及執行緒main,因為Java的main()
方法本身就是一條執行緒了。
範例一的三個執行緒的先後順序是由OS安排,執行順序沒有一定。
範例二,繼承Thread
類別。要執行的程式也是放在run()
方法中。
// 範例二
public class ThreadA extends Thread {
@Override
public void run(){
System.out.println("執行緒a");
}
}
// 範例二
public class ThreadB extends Thread {
@Override
public void run(){
System.out.println("執行緒b");
}
}
測試。因為ThreadA
及ThreadB
繼承了Thread
類別,所以直接呼叫建構子建立Thread
物件a
及b
。
// 範例二
public class Test {
public static void main(String[] args) {
Thread a = new ThreadA();
Thread b = new ThreadB();
a.start(); // 開始執行緒a
b.start(); // 開始執行緒b
System.out.println("執行緒main");
}
}
執行結果如下
執行緒a
執行緒b
執行緒main
範例二同範例一,共有三個執行緒,分別是執行緒a,執行緒b,及執行緒main。
範例二的三個執行緒的先後順序是由OS安排,執行順序沒有一定。
不過執行緒的建立與執行建議使用Executor
的各實作類別,請參考Java 使用ExecutorService來執行多執行緒。
沒有留言:
張貼留言