50 Stimmen

Wann sind Daemon-Threads nützlich?

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?

1voto

Dämonen-Threads in Java sind wie Dienstleister für andere Threads oder Objekte, die im selben Prozess wie der Dämonen-Thread ausgeführt werden. Dämonen-Threads werden für unterstützende Hintergrundaufgaben verwendet und werden nur benötigt, während normale Threads ausgeführt werden. Wenn normale Threads nicht ausgeführt werden und die verbleibenden Threads Dämonen-Threads sind, beendet der Interpreter.

Wenn ein neuer Thread erstellt wird, erbt er den Dämonenstatus seines Elternthreads. Normale Threads und Dämonen-Threads unterscheiden sich darin, was passiert, wenn sie beendet werden. Wenn die JVM stoppt, werden verbleibende Dämonen-Threads aufgegeben: finally-Blöcke werden nicht ausgeführt, Stapel werden nicht aufgelöst - die JVM beendet sich einfach. Aus diesem Grund sollten Dämonen-Threads sparsam verwendet werden und es ist gefährlich, sie für Aufgaben zu verwenden, die irgendwelche Arten von Ein- und Ausgaben ausführen könnten.

0voto

Val Punkte 1

Ich habe sie mit einem Timer verwendet, um Dateien zu löschen, die nicht sofort gelöscht werden können. Das heißt, ich generiere .exe-Dateien, führe sie aus und lösche sie dann. Es besteht jedoch eine 50%ige Chance, dass executable.delete fehlschlägt, anscheinend weil das Bild immer noch durch den Prozess beim Beenden blockiert ist. Sie können das ausführbare Bild nur zuverlässig löschen, nachdem der Prozess vollständig beendet wurde. Aber man weiß nie, wie lange das dauert. Deshalb setzen Sie .deleteOnExit ein, anstatt .delete. Aber Sie möchten auch nicht darauf warten, bis die Java-Maschine ebenfalls beendet ist. Es kann sehr lange dauern und Sie möchten nicht Millionen von nutzlosen dummen .exe-Dateien haben, die Sie nicht mehr benötigen, im Dateisystem hängen haben. Sie planen daher die Löschung des ausführbaren Bildes im Timer, damit sie ein oder zwei Sekunden später erfolgt. Der Timer darf jedoch kein gewöhnlicher Thread sein. Wenn das der Fall ist, wird Ihr Programm blockiert, auch wenn es keine Dateien zum Löschen gibt. Ich kann es jedoch leicht zu einem Daemon machen, da es unwesentlich ist, ob meine Dateien vom Timer gelöscht werden oder nicht - die Dateien werden so oder so entfernt: entweder durch den Daemon oder den Java-Beenden]. Ich denke, das ist ein perfekter Einsatz für einen Daemon.

CodeJaeger.com

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.

Powered by:

X