[英]How can a Thread constructor can accept a run method directly?
我正在參考DeadLock代碼,看到了這個網站
http://www.javatpoint.com/deadlock-in-java
我看到了java API,但找不到任何這樣的Thread Constructor,仍然想知道這是如何在Eclipse IDE中編譯的?
Thread t1 = new Thread() {
public void run() {
synchronized (resource1) {
System.out.println("Thread 1: locked resource 1");
try { Thread.sleep(100);} catch (Exception e) {}
synchronized (resource2) {
System.out.println("Thread 1: locked resource 2");
}
}
}
};
Thread構造函數如何直接接受run方法?
構造函數不接受 run
方法(例如,作為參數),該代碼正在創建匿名類 ,請參閱本教程 。 在幕后,創建了一個沒有名稱的類(匿名類),它從Thread
派生並覆蓋run
方法; 然后創建該類的實例並將其分配給t1
變量。
只是為了完整性,但:從Java 8中, 可以為Thread
構造函數(實際上)接受run
函數作為參數,因為Java的8位的lambda函數。 看起來像這樣:
Thread t = new Thread(() -> {
System.out.println("Running");
});
這是可能的,因為Thread
有一個接受Runnable
實例的構造函數,而Runnable
是一個功能接口 (只定義一個函數的接口),所以你可以簡單地使用lambda創建一個實現該接口的實例,然后將其傳遞給Thread
構造函數。 有一個關於lambda表達式的教程在這里 。 但這並不是引用代碼所做的。
這是使用lambda而不是匿名類的問題中的代碼:
Thread t1 = new Thread(() -> {
synchronized (resource1) {
System.out.println("Thread 1: locked resource 1");
try { Thread.sleep(100);} catch (Exception e) {}
synchronized (resource2) {
System.out.println("Thread 1: locked resource 2");
}
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.