Ich möchte ein Objekt, das einen Daemon-Thread erzeugt, der während der gesamten Lebensdauer des Prozesses ausgeführt wird. Nehmen wir nur an, es handelt sich um einen Thread in einem eingebetteten System, der darauf wartet, Befehle an einem Diagnoseport zu empfangen und zu verarbeiten. Aber es könnte wirklich alles sein. Die Hauptidee ist, dass es etwas über einen langen Zeitraum beobachtet ; Es führt keine Abfolge von Aufgaben aus .
Allgemeine Java-Weisheit sagt: Niemals instanziieren Thread
, ExecutorService
stattdessen eine verwenden. (Siehe z. B. diese Antwort. ) Aber was ist der Vorteil? Die Verwendung eines Thread- Pools als Mittel zum Erstellen eines einzelnen Threads mit langer Laufzeit erscheint sinnlos. Wie wäre es besser, als wenn ich das schreiben würde?
class Foobar {
public Foobar() {
this.threadFactory = Executors.defaultThreadFactory();
...
}
public Foobar(ThreadFactory threadFactory) {
this.threadFactory = threadFactory;
...
}
public void start() {
fooThread = threadFactory.newThread(new Runnable() { ... });
fooThread.setDaemon(true);
fooThread.start();
}
...
}
Hinweis: Diese Frage scheint meiner ähnlich zu sein, aber die Antworten sagen nur, wie ein Thread-Pool verwendet wird, nicht warum .