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接口去實現多線程機制。