Probabilmente la soluzione più semplice e preferita è in Marco13's answer quindi non farti ingannare dalla differenza di voto (la mia risposta ha qualche anno in più) o marchio di accettazione (significa solo che la soluzione mia era appropriata per le circostanze OP non è meglio) .
È possibile utilizzare ThreadFactory
per impostare le discussioni all'interno esecutore di demoni. Ciò influirà sul servizio executor in modo che diventi anche un thread daemon in modo che esso (e i thread gestiti da esso) si fermeranno se non ci sarà nessun altro thread non daemon. Ecco semplice esempio:
ExecutorService exec = Executors.newFixedThreadPool(4,
new ThreadFactory() {
public Thread newThread(Runnable r) {
Thread t = Executors.defaultThreadFactory().newThread(r);
t.setDaemon(true);
return t;
}
});
exec.execute(YourTaskNowWillBeDaemon);
Ma se si desidera ottenere esecutore che vi permetterà sua finitura compito, e al tempo stesso chiamerà automaticamente il suo metodo shutdown()
quando l'applicazione è completa, si potrebbe voler avvolgere il tuo esecutore con Guava'sMoreExecutors.getExitingExecutorService
.
ExecutorService exec = MoreExecutors.getExitingExecutorService(
(ThreadPoolExecutor) Executors.newFixedThreadPool(4),
100_000, TimeUnit.DAYS//period after which executor will be automatically closed
//I assume that 100_000 days is enough to simulate infinity
);
//exec.execute(YourTask);
exec.execute(() -> {
for (int i = 0; i < 3; i++) {
System.out.println("daemon");
try {
TimeUnit.SECONDS.sleep(1);
} catch (Exception e) {
e.printStackTrace();
}
}
});
io come autore di risposta attualmente accettato suggerirebbe la lettura approccio pubblicato da Marco13: http://stackoverflow.com/a/29453160/1393766 e cambiando segno di accettazione dal mio post per la sua, dal momento che la soluzione descritta non v'è probabilmente più semplice e si chiude a ciò che volevi ottenere originariamente. – Pshemo
@Pshemo Lasciami non essere d'accordo con te ... Per favore controlla il mio commento sotto la risposta di Marco13. –
@Pshemo In considerazione del suggerimento di Vladimirs, potresti considerare di sottolineare il fatto che la soluzione "semplice" potrebbe non essere sempre la preferita. – Marco13