Java 程序只允許單一繼承,即一個子類只能有一個父類。所以在Java中如果一個類繼承了某一個類,同時又想采用多線程技術的時,就不能用繼承Thread類的方式產生線程了,因為Java不允許多繼承。這時就要用Runnable接口來創建線程了。采用實現Runnable接口方式實現多線程的大致步驟如下:
- 定義一個新的類實現Runnable接口,假設此類名為TestThread。
- 在TestThread類中實現run()方法,此方法即為新線程的運行程序代碼。
- 創建TestThread類的對象t1,再以t1為參數創建Thread類的對象並調用此對象的start()方法。
下面是采用此方式實現多線程的一個示例:
public class ThreadDemo9_2
{
public static void main(String args[])
{
TestThread t = new TestThread();
new Thread(t).start();
//循環輸出
for(int i = 0; i < 1000; i++)
{
System.out.println("main線程在運行");
}
}
}
class TestThread implements Runnable
{
public void run()
{
for(int i = 0; i < 1000; i++)
{
System.out.println("TestThread在運行");
}
}
}
為什么實現了Runnable接口還需要調用Thread類中的start()方法才能啟動多線程呢?讀者通過查找JDK文檔就可以發現,在Runnable接口中只有一個run()方法,並沒有start()方法。所以一個類實現了Runnable接口也必須用Thread類中的start()方法來啟動多線程。這點可以通過查找JDK文檔中的Thread類發現,在Thread類之中,有這樣一個構造方法:public Thread(Runnable target)
由此構造方法可以發現,可以將一個Runnable接口的實例化對象作為參數去實例化Thread類對象。在實際的開發中,應盡可能去使用Runnable接口去實現多線程機制。
