想象一下Runnable
的以下實現。一個實現接口的簡單類。
public class MyRunnable implements Runnable {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(i + " runnable thread...");
}
}
}
因此,爲了創造你Thread
的方式,你意,你必須提供一個Runnable
目標的實現。有多種方法可以實現這一點。
最直接的方法或許是從上方使用Runnable
的實例:
Thread t1 = new Thread(new MyRunnable());
到另一種方法是直接提供Runnable
在碼作爲匿名內部類它們可以對了解有關here的更多信息。
一個匿名內部類僅僅意味着你在代碼中創建一個類作爲表達式來使用它 - 類必須遵循相同的簽名(即在這種情況下它實現Runnable
接口)。
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(i + " runnable thread...");
}
}
});
從Oracle Docs:
匿名類表達包括以下:
- 的新的運營商
- 的接口的名稱來實現或類來擴展。在這個例子中,匿名類正在實現接口HelloWorld。
- 括號包含構造函數的參數,就像普通的類實例創建表達式一樣。注意:當你實現一個接口時,沒有構造函數,所以你使用一對空括號,就像這個例子。
- 身體,這是一個類聲明的主體。更具體地說,在主體中,方法聲明是允許的,但聲明不是。
所以,基本上你在做什麼是傳遞一個Runnable
您Thread
構造。如果您將它作爲匿名類傳遞,則只需將它作爲表達式傳遞給實際定義整個內部類的表達式即可。
此外,在Java 8,你可以用這樣的lambda表達式替換匿名內部類:
Thread t3 = new Thread(() -> {
for (int i = 0; i < 5; i++) {
System.out.println(i + " runnable thread...");
}
});
檢查匿名類在Java – Sashwat