java中只允許單一繼承,但允許實作多個接口,因此第二種方法更靈活。
複製代碼代碼如下:
/**
* 執行繼承java.lang.Thread類別定義的執行緒
*/
public void startOne() {
// 建立實例
OneThread oneThread = new OneThread();
// 啟動執行緒ThreadA
oneThread.startThreadA();
try {
// 設定執行緒休眠1秒
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 停止線程,這裡為什麼不用stop()方法,因為方法已經廢棄,但可以用在死鎖。
oneThread.stopThreadA();
}
複製代碼代碼如下:
/**
* 執行實作Runnable介面定義的執行緒
*/
public void startTwo() {
// 建立實例
Runnable runnable = new TwoThread();
// 將實例放入到執行緒中
Thread threadB = new Thread(runnable);
// 啟動執行緒
threadB.start();
}
複製代碼代碼如下:
// 繼承Thread類別定義執行緒
class OneThread extends Thread {
private boolean running = false;
public void start() {
this.running = true;
super.start();
}
public void run() {
int i = 0;
try {
while (running) {
System.out.println("繼承Thread類別定義執行緒程式體......" + i++);
Thread.sleep(200);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void startThreadA() {
System.out.println("啟動繼承Thread類別定義執行緒");
this.start();
}
public void stopThreadA() {
System.out.println("關閉繼承Thread類別定義執行緒");
this.running = false;
}
}
複製代碼代碼如下:
// 實作Runnable介面定義執行緒
class TwoThread implements Runnable {
private Date runDate;
public void run() {
System.out.println("實作Runnable介面定義執行緒程式設計體......");
this.runDate = new Date();
System.out.println("執行緒啟動時間......" + runDate);
}
複製代碼代碼如下:
public static void main(String[] args) {
// 實例化物件
ThreadStartAndStop threadStartAndStop = new ThreadStartAndStop();
threadStartAndStop.startOne();
threadStartAndStop.startTwo();
}
啟動繼承Thread類別定義執行緒繼承Thread類別定義執行緒程式體......0
繼承Thread類別定義執行緒程序體......1
繼承Thread類別定義執行緒程序體......2
繼承Thread類別定義執行緒程序體......3
繼承Thread類別定義執行緒程序體......4
關閉繼承Thread類別定義執行緒實作Runnable介面定義執行緒程式體......
線程啟動時間......Fri Mar 15 12:56:57 CST 2013