1、繼承Thread類
public class ThreadA extends Thread {
// 直接繼承Thread,並覆蓋其run()方法
@Override
public void run() {
System.out.println("ThreadA");
}
}
2、實現Runnable接口
Java爲單親繼承,一個類只能唯一繼承另一個類。如果直接繼承Thread類來定義線程,則在開發中有許多限制。
public class hreadB implements Runnable {
public void run() {
System.out.println("ThreadB");
}
}
3、實現Callable接口
public class ThreadC implements Callable <String> {
public String call() {
return "ThreadC";
}
}
public static void main(String[] args) {
ThreadC threadc = new ThreadC();
FutureTask<String> feature = new FutureTask<String>(threadc);
new Thead(feature).start(); // 啓動
// 獲取線程返回結果
System.out.println(feature.get();
}
比較:
1、繼承Thread類的方式雖然簡單,但是不能繼承其他類。很多情況下,開發者只是需要自己的類具有線程的能力,扮演線程的角色,而自己的類需要繼承其他類。
2 、實現Runnable接口,不影響繼承其他類,也不影響實現其他接口。只是實現Runable接口的類多了一種扮演角色,多了一種能力,更加靈活。