Wenn Sie es nur an einer Stelle verwenden möchten, können Sie die java.util.concurrent.ThreadFactory
Implementierung einbinden, z. B. für einen Pool mit 4 Threads, die Sie schreiben würden (Beispiel als Lambda unter der Annahme von Java 1.8 oder neuer):
ExecutorService pool = Executors.newFixedThreadPool(4,
(Runnable r) -> {
Thread t = new Thread(r);
t.setDaemon(true);
return t;
}
);
Normalerweise möchte ich jedoch, dass alle meine Thread-Fabriken Daemon-Threads erzeugen. Daher füge ich eine Dienstprogrammklasse wie folgt hinzu:
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;
}
}
Das erlaubt mir leicht, DaemonThreadFactory.instance
zum ExecutorService
z
ExecutorService pool = Executors.newFixedThreadPool(
4, DaemonThreadFactory.instance
);
oder verwenden Sie es, um einen Daemon- Thread einfach von einem zu starten Runnable
, z
DaemonThreadFactory.instance.newThread(
() -> { doSomething(); }
).start();