2009-05-18 16 views
5

Jestem w pełni świadomy wpływu flagowania wątku jako wątku demona na wyjściu JVM (jeśli wszystkie wątki nie będące demonami zakończą się, JVM zakończy pracę).Co to znaczy być wątkiem demona?

Czy są inne efekty uboczne przy ustawianiu wątku jako demon?

(jako kompletny bok, który jest naprawdę nieistotny z wyjątkiem semantyki, jest znaczenie wątku demona nie wstecz w tym przypadku: nie powinien wątek demona utrzymywać przy życiu JVM ... na przykład, gdybym napisał mój własny demon HTTP i uruchomiłem go, czy nie chciałbym, aby JVM pozostała przy życiu tak długo, jak wątek jest żywy? Czy jest jeszcze jakiś semantyczny termin "daemon"?)

+2

Zazwyczaj masz demona wątków i non-demona wątki uruchomione w tym samym czasie: nie-demon wątków wykonuje pożyteczną pracę, ale nici demon są tylko siedzi tam czeka na rzeczy się wydarzy. Po wykonaniu użytecznej pracy program powinien zakończyć; nie chcesz, żeby było podtrzymywane przez nici, które nic nie robią. W twoim przykładzie demon HTTP jest demonem * process *, a nie demonem. Można sobie wyobrazić komputer stacjonarny, który wyłącza się, gdy nie są uruchomione procesy inne niż demony, a użytkownik nie chce, aby serwer go utrzymywał. (A może zrobiłbyś ... cokolwiek, to nie jest najlepsze imię.) –

+0

Tak, doskonale rozumiem to zachowanie i regularnie go wykorzystuję. Całkowicie przypadkowo byłem tylko pytaniem, czy inni zgodzili się na mylenie nazwy :) – Jared

+1

To nie jest naprawdę mylące, demon nigdy nie powinien wyjść - zawsze działać, gdy program jest uruchomiony, ponieważ NIGDY naprawdę nie wychodź, nie powinny powstrzymywać samego programu przed wyjściem. –

Odpowiedz

4

Jak już masz, oznacza to, że wątek jest odłączany i będzie działał tak długo, jak długo będzie działać JVM, chyba że zatrzymasz go jawnie. Według specyfikacji JVM działa tak długo, jak długo działa dowolny wątek -monitora non.

Poza tym, to nie znaczy prawie nic.

Można argumentować, że jest to wstecz - wszak shutdown (8) zabija procesów demona - ale JVM powinny działać jak dobrze ułożona procesu w inny sposób, co oznacza, że ​​ludzie powinni móc oczekiwać go rozwiązać bez konieczności zabijania. Tak więc ta specyfikacja jest decyzją projektową opartą na tym, co będzie bardziej powszechnym przypadkiem użycia.

3

Gwint demon jest obsługa innych nici. To tylko demon dla samego jvm nie dla świata zewnętrznego. w ten sposób, jeśli tylko wykażą się demony, nie będą już więcej używać. Jeśli chcesz mieć demona http, po prostu napisz serwer http ze zwykłymi wątkami i wywołaj go jako demona, używając zestawu narzędzi twojego systemu operacyjnego do uruchamiania aplikacji jako demona.

do conlcude nitki demon JVM nie jest gwintem demon os. Demony są zwykle nieskończonymi pętlami i nie chcesz, aby twoje jvm działało bez końca, podczas gdy wszystko, co masz uruchomione, to kilka demonów, które czekają na dane wejściowe (które nie są podane).