private ExecutorService exec = Executors.newSingleThreadExecutor(r -> {
Thread t = new Thread(r);
t.setDaemon(true); // allows app to exit if tasks are running
return t ;
});
Capisco l'idea dietro un esecutore ma, il parametro r
mi confonde. Ho usato:Difficoltà a capire un 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;
});
scavare più a fondo e il risultato è:
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
viene passato come parametro al costruttore Thread
oggetto.
- Come è la semplice lettera
r
che indica che l'oggetto passato è unThreadPoolExecutor
? - In che modo un parametro
ThreadPoolExecutor
è passabile come parametro se non implementaRunnable
come richiesto dal costruttore diThread's
?
Se qualcuno potrebbe fornirmi anche una versione non codificata del codice, sarebbe di grande beneficio per la mia comprensione.
Grazie, Radiodef. Capisco perfettamente il codice ora.Dove posso trovare ulteriori informazioni sulle notazioni di tipo 'outerclass $ innerclass' - le specifiche del linguaggio Java? – user465001
Sono felice di spiegarlo. Inoltre non c'è molto di più da imparare sul '$'. Quando si fa riferimento a una classe nidificata o interiore nel codice si utilizza 'Outer.Inner', ma in genere viene compilato in una classe denominata' Outer $ Inner'. Il '$' è un carattere valido per tutti gli identificatori ma di solito è considerato riservato ai meccanismi interni. http://stackoverflow.com/q/7484210/2891664 – Radiodef
Grazie ancora, Radiodef! – user465001