1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| /**
* Complément de la classe {@code java.util.concurrent.Executors}, permettant de créer un pool de threads démons.
*
* @author rom
*/
public final class DaemonExecutors {
/**
* ThreadFactory à utiliser pour créer des threads démons.
*/
private static class DefaultDaemonThreadFactory implements ThreadFactory {
/** Fabrique de threads par défaut. */
private final ThreadFactory defaultThreadFactory = Executors.defaultThreadFactory();
@Override
public Thread newThread(Runnable r) {
/* On demande à la fabrique de threads par défaut de créer un Thread. */
Thread thread = defaultThreadFactory.newThread(r);
/* On configure ce thread en mode démon. */
thread.setDaemon(true);
/* On le retourne. */
return thread;
}
};
/** Interdiction d'instancier. */
private DaemonExecutors() {}
/**
* Retourne un {@code ThreadFactory} de threads démons.
*
* @return {@code ThreadFactory} de threads démons.
*/
public static ThreadFactory defaultDaemonThreadFactory() {
return new DefaultDaemonThreadFactory();
}
/**
* Retourne un exécuteurde threads démons.
*
* @return Exécuteur de threads démons.
*/
public static ExecutorService newSingleDaemonThreadExecutor() {
return Executors.newSingleThreadExecutor(defaultDaemonThreadFactory());
}
/**
* Retourne un exécuteur planifié de threads démons.
*
* @return Exécuteur planifié de threads démons.
*/
public static ScheduledExecutorService newSingleDaemonThreadScheduledExecutor() {
return Executors.newSingleThreadScheduledExecutor(defaultDaemonThreadFactory());
}
} |