【本節目标】
通過閱讀本節内容,你将了解到如何實作Runnable接口并結合Thread類完成多線程的實作,并學會簡單的運用。
基于Runnable接口實作多線程
雖然可以通過Thread類的繼承來實作多線程的定義,但是在Java程式中對于繼承永遠都是存在單繼承的局限的,是以在Java中又提供第二種多線程的主體定義結構形式:實作java.lang.Runnable接口,此接口定義如下:
@FunctionalInterface //從JDK1.8引入Lambda表達式後就變為了函數式的接口
public interface Runnable{
public void run() ;
}
範例:通過Runnable實作多線程主體類
class MyThread implements Runnable { //線程的主體類
private String title;
public MyThread(String title) {
this.title = title;
}
@Override
public void run() { //線程的主體方法
for (int x = 0; x < 10; x++) {
System.out.printf(this.title + "運作,x =" + x);
}
}
}
但是由于此時不再繼承Thread父類了,那麼對于此時的MyThread類中也就不再支援有start()這個繼承的方法,可是如果不用start()方法是無法進行多線程啟動的,那麼這個時候就需要去觀察一下Thread類所提供的構造方法。
構造方法:
public Thread(Runnable target);
範例:啟動多線程
public class ThreadDemo {
public static void main(String[] args) {
Thread threadA=new Thread(new MyThread("線程對象A")) ;
Thread threadB=new Thread(new MyThread("線程對象B")) ;
Thread threadC=new Thread(new MyThread("線程對象C")) ;
threadA.start() ; //啟動多線程
threadB.start() ; //啟動多線程
threadC.start() ; //啟動多線程
}
}

圖一 啟動多線程
這個時候的多線程實作中可以發現,由于隻是實作了Runnable接口對象,是以此時線程主體類就不再有單繼承局限,這樣的設計才是一個标準型的設計。
可以發現從JDK1.8開始,Runnable接口使用了函數式接口定義,是以也可以直接使用Lambda表達式進行線程類實作。
範例:利用Lambda實作多線程定義
public class ThreadDemo {
public static void main(String[] args) {
for (int x = 1; x <= 3; x++) {
String title = "線程對象-" + x ;
// Runnable run = () -> {
// for (int y = 0; y < 10; y++) {
// System.out.println(title + "運作,y =" + y);
// }
// };
// new Thread(run).start();
new Thread(() -> {
for (int y = 0; y < 10; y++) {
System.out.println(title + "運作,y =" + y);
}
}).start();
}
}
}
圖二 利用Lambda實作多線程
在以後的開發之中對于多線程的實作,優先考慮的就是Runnable接口實作,并且永恒都是通過Thread類對象啟動多線程。
想學習更多的Java的課程嗎?從小白到大神,從入門到精通,更多精彩不容錯過!免費為您提供更多的學習資源。
本内容視訊來源于
阿裡雲大學 下一篇:深入剖析Thread與Runnable關系 | 帶你學《Java語言進階特性》之四 更多Java面向對象程式設計文章檢視此處