wally2018 ha scritto:
2018-04-03 - main
2018-04-03 - main
2018-04-03 - DEBUG [pool-1-thread-1] Istanzio il primo thread ed eseguo il 1 task
2018-04-03 - DEBUG [pool-1-thread-1] ..........................
2018-04-03 - DEBUG [pool-1-thread-1] .................................
2018-04-03 - DEBUG [pool-1-thread-1] .........................
2018-04-03 - DEBUG [pool-1-thread-1] ......................
2018-04-03 - DEBUG [pool-2-thread-1] Eseguo il secondo task con lo stesso thread
E' corretto allora quanto ho scritto ????
Senza sapere cosa vuoi fare e perché non ti posso dire se è "corretto".
Dall'output si deduce una cosa: hai usato 2 thread-pool distinti. Nota il numero in rosso:
2018-04-03 - DEBUG [pool-1-thread-1] Istanzio il primo thread ed eseguo il 1 task
2018-04-03 - DEBUG [pool-2-thread-1] Eseguo il secondo task con lo stesso thread
Quindi prima hai chiesto un newFixedThreadPool(1) e gli hai sottomesso il primo task. Poi dopo hai chiesto un altro newFixedThreadPool(1) e gli hai sottomesso il secondo task.
NON è lo stesso thread! Sono due thread distinti, ciascuno appartenente ad un thread-pool diverso.
wally2018 ha scritto:
Quale funzione mi dice i task che sono messi in coda e che vengono eseguiti da quell'unico thread ?
Non capisco bene la domanda: cosa vuoi sapere? Vuoi ottenere dal executor quali task sono in coda? Dalla interfaccia ExecutorService di per sé non lo puoi sapere (a meno di usare il shutdownNow() ).
Se usi e configuri direttamente un ThreadPoolExecutor, allora puoi ottenere il riferimento alla BlockingQueue usata dal executor (e anzi, a dire il vero, quando si crea un ThreadPoolExecutor si
deve passare la BlockingQueue).
P.S. E newFixedThreadPool alla fin fine crea un ThreadPoolExecutor, solo che te lo restituisce come ExecutorService (la interfaccia).