Si vous ne voulez l'utiliser qu'à un seul endroit, vous pouvez mettre en ligne l'option java.util.concurrent.ThreadFactory
Par exemple, pour un pool avec 4 threads, vous écrirez (exemple montré comme un lambda supposant Java 1.8 ou plus récent) :
ExecutorService pool = Executors.newFixedThreadPool(4,
(Runnable r) -> {
Thread t = new Thread(r);
t.setDaemon(true);
return t;
}
);
Mais je veux généralement que toutes mes fabriques de threads produisent des threads démons, alors j'ajoute une classe utilitaire comme suit :
import java.util.concurrent.ThreadFactory;
public class DaemonThreadFactory implements ThreadFactory {
public final static ThreadFactory instance =
new DaemonThreadFactory();
@Override
public Thread newThread(Runnable r) {
Thread t = new Thread(r);
t.setDaemon(true);
return t;
}
}
Cela me permet de passer facilement DaemonThreadFactory.instance
à la ExecutorService
par exemple
ExecutorService pool = Executors.newFixedThreadPool(
4, DaemonThreadFactory.instance
);
ou l'utiliser pour lancer facilement une démon Fil conducteur d'un Runnable
par exemple
DaemonThreadFactory.instance.newThread(
() -> { doSomething(); }
).start();