Якщо ви хочете використовувати його лише в одному місці, тоді ви можете вбудувати java.util.concurrent.ThreadFactory
реалізацію, наприклад, для пулу з 4 потоками, який би ви написали (приклад показаний у вигляді лямбда-припущення, припускаючи Java 1.8 або новішу):
ExecutorService pool = Executors.newFixedThreadPool(4,
(Runnable r) -> {
Thread t = new Thread(r);
t.setDaemon(true);
return t;
}
);
Але я зазвичай хочу, щоб усі мої фабрики Thread виробляли потоки демонів, тому я додаю клас корисності таким чином:
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;
}
}
Це дозволяє мені легко перейти DaemonThreadFactory.instance
до ExecutorService
, наприклад
ExecutorService pool = Executors.newFixedThreadPool(
4, DaemonThreadFactory.instance
);
або скористайтеся ним, щоб легко запустити демонову нитку з Runnable
, наприклад,
DaemonThreadFactory.instance.newThread(
() -> { doSomething(); }
).start();