創建線程有兩種方法:繼承Thread類和實現Runnable接口。
方法一:繼承 Thread 類,覆蓋方法 run(),我們在創建的 Thread 類的子類中重寫 run() ,加入線程所要執行的代碼即可。
a.每個線程都是通過某個特定Thread對象所對應的方法run()l來完成其操作的,方法run()成為線程體。
b.如果想要啟動多線程,則肯定調用start()方法,start方法可以調用被子類覆寫過的run方法
c.不過這種這種實現方式會受到單繼承的局限
下面是一個例子:
public class MyThread extends Thread {
int count= 1, number;
public MyThread(int num) {
number = num;
System.out.println("創建線程 " + number);
}
public void run() {
while(true) {
System.out.println("線程 " + number + ":計數 " + count);
if(++count== 6) return;
}
}
public static void main(String args[]) {
for(int i = 0; i < 5; i++) new MyThread(i+1).start();
}
}
方法二:實現 Runnable 接口
Runnable 接口只有一個方法 run(),我們聲明自己的類實現 Runnable 接口并提供這一方法,將我們的線程代碼寫入其中,就完成了這一部分的任務。
但是 Runnable 接口并沒有任何對線程的支持,我們還必須創建 Thread 類的實例,這一點通過 Thread 類的構造函數public Thread(Runnable target);來實現。
該實現方式有以下好處:
① 適合多個相干同程序代碼的線程去處理同一資源的情況。
② 可以避免由于Java單繼承特性帶來的局限。
③ 有利于程序的健壯性,代碼能夠被多個線程共享。
下面是一個例子:
public class MyThread implements Runnable {
int count= 1, number;
public MyThread(int num) {
number = num;
System.out.println("創建線程 " + number);
}
public void run() {
while(true) {
System.out.println("線程 " + number + ":計數 " + count);
if(++count== 6) return;
}
}
public static void main(String args[]) {
for(int i = 0; i < 5; i++) new Thread(new MyThread(i+1)).start();
}
}
兩種方法各有千秋,可以靈活運用。