private ExecutorService exec = Executors.newSingleThreadExecutor(r -> {
Thread t = new Thread(r);
t.setDaemon(true); // allows app to exit if tasks are running
return t ;
});
Я понимаю идею исполнителя, но paramate 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
в качестве параметра, если он не реализуетRunnable
в соответствии с требованиями стандартаThread's
?
Если бы кто-то мог предоставить мне не-лямбда-версию кода, это было бы очень полезно для моего понимания.
Спасибо, Radiodef. Теперь я полностью понимаю этот код.Где я могу узнать больше о нотах типа outerclass $ innerclass? - Спецификации языка Java? – user465001
Я рад объяснить это. Также не так много узнать о '' '. Когда вы ссылаетесь на вложенный или внутренний класс в коде, вы используете 'Outer.Inner', но обычно он скомпилирован в класс под названием' Outer $ Inner'. «$» Является допустимым символом для всех идентификаторов, но обычно считается зарезервированным для внутренних механизмов. http://stackoverflow.com/q/7484210/2891664 – Radiodef
Еще раз спасибо, Radiodef! – user465001