Ich weiß, dass Deamon-Threads Hintergrundthreads sind. Wir können unseren eigenen Deamonthread erstellen, indem wir setDaemon(true)
aufrufen.
Meine Frage ist: Warum und wann müssen wir unseren Thread als Deamon-Thread erstellen?
Ich weiß, dass Deamon-Threads Hintergrundthreads sind. Wir können unseren eigenen Deamonthread erstellen, indem wir setDaemon(true)
aufrufen.
Meine Frage ist: Warum und wann müssen wir unseren Thread als Deamon-Thread erstellen?
Die JVM wird beendet, wenn alle laufenden Threads Dämonen-Threads sind. Stellen Sie sich vor, Sie schreiben ein einfaches Spiel, in dem Ihre Hauptmethode solange läuft, bis Sie sich entscheiden zu beenden. Und stellen Sie sich vor, dass Sie zu Beginn des Spiels einen Thread starten, der endlos eine Website abfragt, um Alarme auszulösen. Sie möchten, dass die JVM beendet wird, wenn Sie das Spiel beenden. Sie möchten nicht, dass die endlose Abfrage das Beenden des Spiels verhindert. Deshalb machen Sie diesen Abfrage-Thread zu einem Dämonen-Thread.
Dienste, die Sie Ihren Verbrauchern ohne Benutzerinteraktion über im Wesentlichen Benutzer-Threads anbieten möchten, bilden den Hauptanwendungsfall für das Einrichten eines Benutzerthreads als Daemon.
Als Folge davon garantiert die JVM, dass Daemon-Threads kontinuierlich ausgeführt werden, solange Benutzerthreads existieren. Beispiele dafür sind GC, UI-Thread usw., die als Daemons fungieren.
Ich hoffe, das hilft.
Wie andere bereits angemerkt haben, verhindert ein Daemon-Thread nicht, dass die JVM beendet wird, wenn das Programm fertig ist, während dieser Thread noch läuft.
Im Allgemeinen sollten Sie lieber keine Daemon-Threads erstellen, es sei denn, Sie sind sich absolut sicher, dass der Thread keine Nebenwirkungen hat. Da Sie nicht sagen können, wann der Thread stoppt, werden Finalizer-Blöcke nicht ausgeführt, ebenso wie kein Stack abgewickelt wird. Versuchen Sie also, IO-Operationen in Daemon-Threads zu vermeiden, da dies Daten beschädigen kann.
Normalerweise beendet das Programm, wenn alle seine Threads ihre run()
-Methode beendet haben. Daemon-Threads verhindern nicht, dass das Programm beendet wird, auch wenn sie noch ausgeführt werden, d.h. run()
ausführen.
Sie sollten also einen Daemon-Thread verwenden, wenn Sie nicht verhindern möchten, dass das Programm beendet wird, wenn der Thread noch läuft. Dies ist typisch zum Beispiel für langfristige periodische Aufgaben, hängt aber tatsächlich sehr stark von Ihrem Programm, Ihrem Design und Ihrem Geschmack ab.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.