Что такое поток демона в Java? - PullRequest
735 голосов
/ 06 февраля 2010

Кто-нибудь может мне сказать, что за потоки демонов в Java?

Ответы [ 24 ]

8 голосов
/ 10 февраля 2017

Нити демона похожи на помощников. Non-Daemon темы как фронт-исполнители. Помощники помогают исполнителям завершить работу. Когда работа завершена, исполнители больше не нуждаются в помощи. Поскольку помощь не требуется, помощники покидают это место. Поэтому, когда задания потоков не-Daemon завершены, потоки Daemon удаляются.

5 голосов
/ 27 июня 2012

Поток демона аналогичен обычному потоку, за исключением того, что JVM будет отключаться только тогда, когда другие потоки, не являющиеся демонами, не существуют. Потоки демонов обычно используются для предоставления сервисов вашему приложению.

5 голосов
/ 26 июля 2013

Поток демона в Java - это поток, который работает в фоновом режиме и в основном создается JVM для выполнения фоновых задач, таких как сборка мусора и другие домашние задачи.

Указывает на примечание:

  1. Любой поток, созданный основным потоком, который запускает метод main в Java, по умолчанию не является демоном, поскольку поток наследует свою природу демона из потока, который создает его, т.е. родительский поток, и поскольку основной поток является потоком, не являющимся демоном, любой другой поток, созданный из него, останется не демоном до тех пор, пока он не будет явно создан демоном путем вызова setDaemon (true).

  2. Thread.setDaemon (true) создает демон Thread, но его можно вызвать только перед запуском Thread в Java. Он выдаст исключение IllegalThreadStateException, если соответствующий поток уже запущен и работает.

Разница между потоком Daemon и Non-Daemon в Java:

1) JVM не ожидает завершения работы какого-либо потока демона перед его существованием.

2) Поток демона обрабатывается иначе, чем пользовательский поток, когда JVM завершает работу, наконец, блоки не вызываются, стеки не разматываются, а JVM просто выходит.

4 голосов
/ 11 февраля 2016

В Java Потоки демона являются одним из типов потока, который не препятствует выходу виртуальной машины Java (JVM). Основная цель потока демона - выполнить фоновую задачу, особенно в случае какой-либо рутинной периодической задачи или работы. При выходе из JVM поток демона также умирает.

При установке thread.setDaemon(true) поток становится потоком демона. Однако вы можете установить это значение только до начала потока.

4 голосов
/ 16 августа 2012

Потоки Daemon, как все объяснили, не будут ограничивать выход из JVM, поэтому в целом это счастливый поток для Application с точки зрения выхода.

Хочу добавить, что потоки демона можно использовать, когда, скажем, я предоставляю такой API-интерфейс, как отправка данных на сторонний сервер или JMS, мне может потребоваться агрегировать данные на уровне клиентской JVM, а затем отправлять в JMS в виде отдельная тема. Я могу сделать этот поток потоком демона, если это не обязательные данные для отправки на сервер. Этот вид данных похож на журнал регистрации / агрегации.

С уважением, Manish

4 голосов
/ 21 июля 2014

Поток демона похож на процесс демона, который отвечает за управление ресурсами, поток Java демона создается виртуальной машиной Java для обслуживания пользовательских потоков. пример обновления системы для unix, unix - это процесс-демон. Дочерний поток демона всегда является потоком демона, поэтому по умолчанию демон имеет значение false. Вы можете проверить поток как демон или пользователь, используя метод isDaemon (). поэтому поток демона или процесс демона в основном отвечают за управление ресурсами. например, когда вы запускаете jvm, запускается сборщик мусора, который является потоком демона с приоритетом 1, который является самым низким, который управляет памятью. jvm жив, пока жив пользовательский поток, вы не можете уничтожить поток демона. jvm отвечает за уничтожение потоков демона.

4 голосов
/ 05 января 2017

Потоки демонов обычно называются потоками «Service Provider». Эти потоки должны использоваться не для выполнения программного кода, а для системного кода. Эти потоки работают параллельно вашему коду, но JVM может уничтожить их в любое время. Когда JVM не находит пользовательских потоков, он останавливает его, и все потоки демона мгновенно завершаются. Мы можем установить поток, не являющийся демоном, в демон, используя:

setDaemon(true)
3 голосов
/ 30 мая 2014

Любой поток Java может быть потоком демона.

Потоки демона являются поставщиками услуг для других потоков, работающих в том же процессе, что и поток демона. Например, браузер HotJava использует до четырех потоков демонов с именем «Сборщик изображений» для извлечения изображений из файловой системы или сети для любого потока, который в этом нуждается. Метод run() для потока демона обычно представляет собой бесконечный цикл, который ожидает запроса на обслуживание. Когда единственными оставшимися потоками в процессе являются потоки демона, интерпретатор завершается. Это имеет смысл, поскольку, когда остаются только потоки демона, нет другого потока, для которого поток демона может предоставить службу.

Чтобы указать, что поток является потоком демона, вызовите метод setDaemon с аргументом true. Чтобы определить, является ли поток потоком демона, используйте метод доступа isDaemon.

Надеюсь, это поможет !!!!!!

3 голосов
/ 28 января 2014

Потоки демона - это потоки, которые работают в фоновом режиме, пока другие потоки процесса, не являющиеся демонами, все еще работают. Таким образом, когда все потоки, не являющиеся демонами, завершаются, потоки демонов завершаются. Примером потока, не являющегося демоном, является поток, выполняющий Main. Поток становится демоном, вызывая метод setDaemon() до его запуска

Для дополнительной справки: Поток демона в Java

2 голосов
/ 14 апреля 2018

JVM выполнит работу, когда завершится выполнение последнего потока, не являющегося демоном. По умолчанию JVM создает поток как недемон, но мы можем сделать поток демоном с помощью метода setDaemon(true). Хорошим примером потока Daemon является поток GC, который завершит свою работу, как только будут завершены все потоки, не являющиеся демонами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...