Czy ktoś może mi powiedzieć, jakie wątki demonów są w Javie ?
java
multithreading
biegun
źródło
źródło
Thread
Javadoc opisuje, czym one są: java.sun.com/javase/6/docs/api/java/lang/Thread.htmlOdpowiedzi:
Wątek demona jest wątkiem, który nie uniemożliwia wyjścia maszyny JVM po zakończeniu programu, ale wątek nadal działa. Przykładem wątku demona jest odśmiecanie.
Możesz użyć tej
setDaemon(boolean)
metody, aby zmienićThread
właściwości demona przed uruchomieniem wątku.źródło
setDamon(boolean)
można go wywołać tylko przed rozpoczęciem wątku. Domyślnie wątek dziedziczy status demona jego wątku nadrzędnego.thread that does not prevent the JVM from exiting when the program finishes but the thread is still running
oznacza w zasadzie, że proces JVM, który uruchomił wątek, nie dba o to, czy wątek demona zakończy działanie, czy nie, po prostu zakończy się, jeśli wszystkie normalne wątki zakończą wykonywanie.Jeszcze kilka punktów (odniesienie: Java Concurrency in Practice )
Gdy wszystkie wątki niebędące demonami zakończą się, maszyna JVM zatrzymuje się, a wszelkie pozostałe wątki demonów są porzucane :
Z tego powodu wątki demonów powinny być używane oszczędnie, a ich używanie do zadań, które mogą wykonywać dowolne operacje wejścia / wyjścia, jest niebezpieczne.
źródło
finally
są wykonywane żadne bloki, niezależnie od tego, czy wątki są demonami, czy nie. Nie dzwoń,System.exit(…)
jeśli uważasz, że mogą istnieć uruchomione wątki wykonujące operacje we / wy. Jedyna różnica polega na tym, że JVM wyzwoli własne zakończenie, gdy zostaną tylko wątki demona.Wszystkie powyższe odpowiedzi są dobre. Oto prosty krótki fragment kodu, który ilustruje różnicę. Wypróbuj z każdą wartością true i false w
setDaemon
.źródło
Tradycyjnie procesami demonów w systemie UNIX były procesy działające w tle, podobnie jak usługi w systemie Windows.
Wątek demona w Javie to taki, który nie uniemożliwia wyjścia JVM. W szczególności JVM zakończy działanie, gdy pozostaną tylko wątki demona. Tworzysz go, wywołując
setDaemon()
metodęThread
.Przeczytaj wątki Daemon .
źródło
Wątki demona są jak dostawcy usług dla innych wątków lub obiektów działających w tym samym procesie co wątek demona. Wątki demona są używane do zadań wspierających w tle i są potrzebne tylko podczas wykonywania normalnych wątków. Jeśli normalne wątki nie są uruchomione, a pozostałe wątki są wątkami demonicznymi, interpreter kończy działanie.
Na przykład przeglądarka HotJava używa do czterech wątków demona o nazwie „Moduł pobierania obrazu” do pobierania obrazów z systemu plików lub sieci dla dowolnego wątku, który tego potrzebuje.
Wątki demona są zwykle używane do wykonywania usług dla aplikacji / apletu (takich jak ładowanie „bitów fiddley”). Zasadnicza różnica między wątkami użytkownika a wątkami demona polega na tym, że JVM zamknie program dopiero po zakończeniu wszystkich wątków użytkownika. Wątki demonów są kończone przez JVM, gdy nie są już uruchomione żadne wątki użytkownika, w tym główny wątek wykonania.
setDaemon (prawda / fałsz)? Ta metoda służy do określenia, że wątek jest wątkiem demona.
public boolean isDaemon ()? Ta metoda służy do ustalenia, czy wątek jest wątkiem demona, czy nie.
Na przykład:
Wynik:
źródło
Definicja demona (Computing):
—— Źródło: angielski przez Oxford Dictionaries
Co to jest wątek Daemon w Javie?
źródło
Wątek demon jest wątek, który jest uważany robi pewne zadania w tle jak rozpatrywania wniosków lub różnych chronjobs które mogą występować w aplikacji.
Gdy w twoim programie pozostaną tylko wątki demona , zakończy działanie. Jest tak, ponieważ zwykle te wątki współpracują z normalnymi wątkami i zapewniają obsługę zdarzeń w tle.
Możesz określić, że a
Thread
jest demonem za pomocąsetDaemon
metody, zwykle nie wychodzą, ani nie są przerywane. Po prostu zatrzymują się, gdy aplikacja się zatrzyma.źródło
Jedno nieporozumienie, które chciałbym wyjaśnić:
źródło
Wątek demona i wątki użytkownika. Zasadniczo wszystkie wątki utworzone przez programistę są wątkiem użytkownika (chyba że podasz go jako demon lub twój wątek nadrzędny jest demonem). Wątek użytkownika jest zasadniczo przeznaczony do uruchamiania naszego kodu programu. JVM nie kończy się, dopóki nie zakończy się cały wątek użytkownika.
źródło
Java ma specjalny rodzaj wątku zwany demonem wątku.
Do czego służą wątki demonów?
Zwykle używany jako usługodawca dla normalnych wątków. Zwykle mają nieskończoną pętlę, która czeka na zgłoszenie serwisowe lub wykonuje zadania wątku. Nie mogą wykonywać ważnych prac. (Ponieważ nie wiemy, kiedy będą mieli czas procesora i mogą zakończyć w dowolnym momencie, jeśli nie są uruchomione żadne inne wątki).
Typowym przykładem tego rodzaju wątków jest moduł śmieciowy Java .
Jest więcej...
setDaemon()
metodę dopiero przed wywołaniemstart()
metody. Po uruchomieniu wątku nie można modyfikować jego statusu demona.isDaemon()
metody, aby sprawdzić, czy wątek jest wątkiem demona czy wątkiem użytkownika.źródło
Wątki demonów są jak asystenci. Wątki inne niż demony są jak czołowi wykonawcy. Asystenci pomagają wykonawcom w ukończeniu pracy. Po zakończeniu zadania wykonawcy nie potrzebują już pomocy do wykonania. Ponieważ pomoc nie jest potrzebna, asystenci opuszczają to miejsce. Kiedy zadania wątków innych niż demon zostaną zakończone, wątki demona znikają.
źródło
Wątek demona jest jak normalny wątek, z tą różnicą, że JVM zostanie zamknięty tylko wtedy, gdy inne wątki inne niż demon nie istnieją. Wątki demonów są zwykle używane do świadczenia usług dla aplikacji.
źródło
Wątek demona w Javie to wątek działający w tle i najczęściej tworzony przez JVM do wykonywania zadań w tle, takich jak odśmiecanie i inne zadania związane z utrzymaniem domu.
Punkty do odnotowania:
Każdy wątek utworzony przez główny wątek, który uruchamia główną metodę w Javie, domyślnie nie jest demonem, ponieważ Thread dziedziczy naturę demona od wątku, który go tworzy, tj. Wątku macierzystego, a ponieważ wątek główny jest wątkiem innym niż demon, każdy inny wątek utworzony z niego będzie pozostają nie-demonami, dopóki jawnie nie stanie się demonem, wywołując setDaemon (true).
Thread.setDaemon (true) tworzy demona wątku, ale można go wywołać tylko przed uruchomieniem wątku w Javie. Zgłasza IllegalThreadStateException, jeśli odpowiedni wątek jest już uruchomiony i uruchomiony.
Różnica między wątkiem Daemon i Non Daemon w Javie:
1) JVM nie czeka na zakończenie żadnego wątku demona.
2) Wątek demona jest traktowany inaczej niż wątek użytkownika, gdy JVM kończy działanie, w końcu bloki nie są wywoływane, stosy nie są rozwijane, a JVM po prostu wychodzi.
źródło
W Javie wątki demona są jednym z typów wątku, który nie uniemożliwia wyjścia wirtualnej maszyny Java (JVM). Głównym celem wątku demona jest wykonanie zadania w tle, szczególnie w przypadku rutynowych zadań okresowych lub pracy. Po wyjściu z JVM umiera również wątek demona.
Ustawienie a powoduje
thread.setDaemon(true)
, że wątek staje się wątkiem demona. Można jednak ustawić tę wartość tylko przed rozpoczęciem wątku.źródło
Oto przykład, aby przetestować zachowanie wątków demona w przypadku wyjścia jvm z powodu braku wątków użytkownika.
Zwróć uwagę na ostatni ostatni wiersz w wynikach poniżej, gdy główny wątek zakończył działanie, wątek demona również umarł i nie wypisał instrukcji wykonanej ostatecznie9 w bloku ostatecznie. Oznacza to, że wszelkie zasoby we / wy zamknięte w końcu bloku wątku demona nie zostaną zamknięte, jeśli JVM zakończy działanie z powodu nieistnienia wątków użytkownika.
Wynik
źródło
Wątki demonów są, jak wszyscy wyjaśnili, nie ograniczają JVM do wyjścia, więc w zasadzie jest to szczęśliwy wątek dla aplikacji z punktu widzenia wyjścia.
Chcę dodać, że wątków demona można użyć, gdy powiedzę, że udostępniam interfejs API, np. Wypychając dane na serwer zewnętrzny lub JMS, może być konieczne agregowanie danych na poziomie JVM klienta, a następnie wysyłanie do JMS osobnego wątku. Mogę utworzyć ten wątek jako wątek demona, jeśli nie są to dane obowiązkowe, które należy przekazać na serwer. Tego rodzaju dane są jak push log / agregacja.
Pozdrawiam, Manish
źródło
Wątek demona jest jak proces demona, który jest odpowiedzialny za zarządzanie zasobami, wątek demona jest tworzony przez maszynę wirtualną Java w celu obsługi wątków użytkownika. przykładowy system aktualizacji dla unixa, unix to proces demona. potomek wątku demona jest zawsze wątkiem demona, więc domyślnie demon ma wartość false. możesz sprawdzić wątek jako demona lub użytkownika za pomocą metody „isDaemon ()”. więc wątek lub proces demona są w zasadzie odpowiedzialne za zarządzanie zasobami. na przykład podczas uruchamiania jvm uruchomiony jest moduł czyszczenia pamięci, który jest wątkiem demona, którego priorytetem jest 1, który jest najniższy, który zarządza pamięcią. jvm żyje tak długo, jak wątek użytkownika jest aktywny, nie możesz zabić demona thread.jvm jest odpowiedzialny za zabicie wątków demona.
źródło
Porozmawiajmy tylko w kodzie z działającymi przykładami. Podoba mi się powyższa odpowiedź Russa, ale aby usunąć wszelkie wątpliwości, trochę ją ulepszyłem. Uruchomiłem go dwa razy, raz z wątkiem roboczym ustawionym na deamon true (wątek deamon), a innym razem na false (wątek użytkownika). Potwierdza, że nić diamon kończy się, gdy kończy się nić główna.
źródło
Wątki demonów są ogólnie znane jako wątki „usługodawcy”. Wątków tych nie należy używać do wykonywania kodu programu, ale kodu systemowego. Wątki te działają równolegle do kodu, ale JVM może je zabić w dowolnym momencie. Gdy JVM nie znajdzie wątków użytkownika, zatrzymuje je, a wszystkie wątki demona kończą się natychmiast. Możemy ustawić wątek inny niż demon na demona, używając:
źródło
Wątki demonów są wątkami działającymi w tle, dopóki inne wątki procesu inne niż demony są nadal uruchomione. Zatem po zakończeniu wszystkich wątków nie-demonów wątki demonów zostają zakończone. Przykładem wątku niebędącego demonem jest wątek uruchamiający Main. Wątek jest demonem poprzez wywołanie
setDaemon()
metody przed uruchomieniem wątkuWięcej informacji: wątek Daemon w Javie
źródło
Dla mnie wątek demona jest jak opiekun domu dla wątków użytkowników. Jeśli wszystkie wątki użytkownika zakończą się, wątek demona nie ma zadania i zostaje zabity przez maszynę JVM. Wyjaśniłem to w filmie na YouTube .
źródło
JVM wykona pracę po zakończeniu ostatniego wykonania wątku nie-demona. Domyślnie JVM utworzy wątek jako nondaemon, ale możemy zrobić wątek jako demon za pomocą metody
setDaemon(true)
. Dobrym przykładem wątku Daemon jest wątek GC, który zakończy swoją pracę, gdy tylko wszystkie wątki nondaemon zostaną zakończone.źródło
Wątki demonów umierają po wyjściu wątku twórcy.
Wątki inne niż demony (domyślne) mogą nawet żyć dłużej niż główny wątek.
źródło
join
demon pozostanie tak długo, jak działa wątek główny.