private ExecutorService exec = Executors.newSingleThreadExecutor(r -> {
Thread t = new Thread(r);
t.setDaemon(true); // allows app to exit if tasks are running
return t ;
});
我理解執行者背後的想法,但參數r
令我困惑。我用:難以理解Java 8 Lambda
final ExecutorService exec = Executors.newSingleThreadExecutor(r -> {
Thread t = new Thread(r);
System.out.println("Class of r: " + r.getClass()+ ". r to string: " + r.toString());
System.out.println("Class of t: " + t.getClass() +". Name of t: "+ t.getName());
t.setDaemon(true);
return t;
});
深入挖掘,其結果是:
Class of r: class java.util.concurrent.ThreadPoolExecutor$Worker. r to string: [email protected][State = -1, empty queue]
Class of t: class java.lang.Thread. Name of t: Thread-3
r
被作爲一個參數對Thread
對象構造通過。
- 簡單字母
r
如何表示傳遞的對象是ThreadPoolExecutor
? - 如果
ThreadPoolExecutor
不按Thread's
構造函數的要求執行Runnable
,ThreadPoolExecutor
如何作爲參數通過?
如果有人能爲我提供非lambda版本的代碼,那對我的理解會有很大的好處。
謝謝,Radiodef。我現在完全理解代碼。我在哪裏可以瞭解更多關於'outerclass $ innerclass'類型的記法 - Java語言規範? – user465001 2014-11-06 03:40:31
我很高興解釋它。學習'$'也沒有更多。當您在代碼中引用嵌套類或內部類時使用'Outer.Inner',但通常將其編譯爲名爲'Outer $ Inner'的類。 '$'是所有標識符的有效字符,但通常認爲它是爲內部機制保留的。 http://stackoverflow.com/q/7484210/2891664 – Radiodef 2014-11-06 03:44:38
再次感謝Radiodef! – user465001 2014-11-06 03:58:28