private ExecutorService exec = Executors.newSingleThreadExecutor(r -> {
Thread t = new Thread(r);
t.setDaemon(true); // allows app to exit if tasks are running
return t ;
});
Rozumiem ideę executora, ale paramater r
wprowadza mnie w błąd. Użyłem:Masz problemy ze zrozumieniem 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;
});
kopać głębiej, a wynik jest:
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
jest przekazywana jako parametr do konstruktora Thread
obiektu.
- Jaka jest prosta litera
r
wskazująca, że przekazany obiekt toThreadPoolExecutor
? - Jak można przejechać parametr
ThreadPoolExecutor
jako parametr, jeśli nie implementuje onRunnable
zgodnie z wymaganiami konstruktoraThread's
?
Jeśli ktoś mógłby mi dostarczyć wersję kodu, która nie jest lambdą, byłoby to bardzo korzystne dla mojego zrozumienia.
Dzięki, Radiodef. W pełni rozumiem kod teraz.Gdzie mogę dowiedzieć się więcej o notacjach typu "outerclass $ innerclass" - specyfikacji języka Java? – user465001
Miło mi to wyjaśnić. Również nie ma o wiele więcej do nauczenia się o '$'. Kiedy odwołujesz się do zagnieżdżonej lub wewnętrznej klasy w kodzie, używasz 'Outer.Inner', ale zazwyczaj jest ona faktycznie kompilowana do klasy o nazwie' Outer $ Inner'. '$' Jest poprawnym znakiem dla wszystkich identyfikatorów, ale zwykle jest uważany za zarezerwowany dla mechanizmów wewnętrznych. http://stackoverflow.com/q/7484210/2891664 – Radiodef
Jeszcze raz dziękuję, Radiodef! – user465001