天天看點

定義并啟動一個線程

建立線程執行個體的應用程式必須提供在該線程中運作的代碼。有兩種方法可以做到:

1,提供一個Runnable對象。runnable接口隻定義了一個run方法用來包含線上程中執行的方法。Runnable對象被傳遞給Thread的構造函數,如下HelloRunnable示例:

public class HelloRunnable implements Runnable {

    public void run() {
        System.out.println("Hello from a thread!");
    }

    public static void main(String args[]) {
        (new Thread(new HelloRunnable())).start();
    }

}      

2,繼承Thread。Thread類本身實作了Runnable,盡管它的run方法什麼也不做。應用程式可以繼承線程,提供自己的運作實作,如下HelloThread示例中:

public class HelloThread extends Thread {

    public void run() {
        System.out.println("Hello from a thread!");
    }

    public static void main(String args[]) {
        (new HelloThread()).start();
    }

}      

我們注意到兩個例子中都調用了Thread.start以啟動線程(Thread)

那麼我們應該選擇哪一個方式呢?第一個使用Runnable對象的方式更通用,因為Runnable對象不僅可以子類化為Thread,也可以子類化為其他類。 第二種方式在簡單的應用程式中更容易使用,但由于任務類必須是線程的子類,是以受到限制。This lesson focuses on the first approach, which separates the 

Runnable

 task from the 

Thread

 object that executes the task. 本課重點介紹第一種方法,它将runnable任務與執行任務的thread對象分離開來。這種方法不僅更加靈活,而且适用于稍後讨論的進階線程管理api。

繼續閱讀