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
让我感到困惑。我使用了:
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: java.util.concurrent.ThreadPoolExecutor$Worker@1dc3963[State = -1, empty queue]
Class of t: class java.lang.Thread. Name of t: Thread-3
参数r
被传递给Thread
对象的构造函数。
- 简单的字母
r
如何表示被传递的对象是一个ThreadPoolExecutor
? - 如果
ThreadPoolExecutor
没有像Thread
构造函数所需的那样实现Runnable
,它如何作为参数传递?
如果有人能够提供非lambda版本的代码,这对我理解会很有帮助。
outerclass$innerclass
类型表示法的知识 - Java 语言规范? - user465001ClassContainingLambda$$Lambda$1
时,它并不是一个内部类... - Holger