Что такое stream демона в Java?

Может ли кто-нибудь сказать мне, какие streamи деmonoв есть в Java?

Нить демона – это stream, который не препятствует тому, чтобы JVM выходил, когда программа заканчивается, но stream все еще работает. Примером демона является garbage collection.

Вы можете использовать метод setDaemon(boolean) для изменения свойств демона Thread до начала streamа.

Еще несколько пунктов (ссылка: Java Concurrency на практике )

  • Когда создается новый stream, он наследует статус демона своего родителя.
  • Обычные нити и streamи деmonoв отличаются тем, что происходит, когда они выходят. Когда JVM останавливает все оставшиеся streamи демона, заброшены :

    • наконец, блоки не выполняются ,
    • стеки не разматываются – JVM просто выходит.

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

Все вышеприведенные ответы хороши. Вот простой небольшой fragment кода, чтобы проиллюстрировать разницу. Попробуйте с помощью каждого из значений true и false в setDaemon .

 public class DaemonTest { public static void main(String[] args) { new WorkerThread().start(); try { Thread.sleep(7500); } catch (InterruptedException e) { // handle here exception } System.out.println("Main Thread ending") ; } } class WorkerThread extends Thread { public WorkerThread() { // When false, (ie when it's a user thread), // the Worker thread continues to run. // When true, (ie when it's a daemon thread), // the Worker thread terminates when the main // thread terminates. setDaemon(true); } public void run() { int count = 0; while (true) { System.out.println("Hello from Worker "+count++); try { sleep(5000); } catch (InterruptedException e) { // handle exception here } } } } 

Традиционно процессы демона в UNIX были те, которые постоянно работали в фоновом режиме, подобно сервисам в Windows.

Нить демона в Java – это тот, который не препятствует выходу JVM. В частности, JVM выйдет, когда остаются только streamи демона. Вы создаете его, вызывая метод setDaemon() для Thread .

Прочитайте streamи Daemon .

Потоки Daemon похожи на поставщиков услуг для других streamов или объектов, работающих в том же процессе, что и stream демона. Потоки Daemon используются для поддержки фоновых задач и необходимы только при выполнении обычных streamов. Если нормальные streamи не выполняются, а оставшиеся streamи – streamи демона, то интерпретатор завершает работу.

Например, браузер HotJava использует до четырех streamов демона с именем «Image Fetcher» для извлечения изображений из файловой системы или сети для любого streamа, который ему нужен.

Потоки Daemon обычно используются для выполнения сервисов для вашего приложения / апплета (например, загрузка «фиктивных бит»). Основное различие между streamами пользователей и streamами демона заключается в том, что JVM будет только закрывать программу, когда все пользовательские streamи прекратятся. Потоки Daemon прерываются JVM, когда больше нет streamов пользователей, включая основной stream выполнения.

setDaemon (true / false)? Этот метод используется для указания, что stream является streamом демона.

public boolean isDaemon ()? Этот метод используется для определения streamа – stream демона или нет.

Например:

 public class DaemonThread extends Thread { public void run() { System.out.println("Entering run method"); try { System.out.println("In run Method: currentThread() is" + Thread.currentThread()); while (true) { try { Thread.sleep(500); } catch (InterruptedException x) {} System.out.println("In run method: woke up again"); } } finally { System.out.println("Leaving run Method"); } } public static void main(String[] args) { System.out.println("Entering main Method"); DaemonThread t = new DaemonThread(); t.setDaemon(true); t.start(); try { Thread.sleep(3000); } catch (InterruptedException x) {} System.out.println("Leaving main method"); } } 

Вывод:

 C:\java\thread>javac DaemonThread.java C:\java\thread>java DaemonThread Entering main Method Entering run method In run Method: currentThread() isThread[Thread-0,5,main] In run method: woke up again In run method: woke up again In run method: woke up again In run method: woke up again In run method: woke up again In run method: woke up again Leaving main method C:\j2se6\thread> 

Демон-демона – это stream, который рассматривается как выполняющий некоторые задачи в фоновом режиме, такие как запросы обработки или различные хронограммы, которые могут существовать в приложении.

Когда ваша программа будет иметь только оставшиеся демонные streamи, она выйдет. Это потому, что обычно эти streamи работают вместе с обычными streamами и обеспечивают фоновую обработку событий.

Вы можете указать, что Thread является деmonoм с помощью метода setDaemon , они обычно не выходят, и они не прерываются. Они просто останавливаются, когда приложение останавливается.

Что такое демона в java?

  • Потоки Daemon могут закрываться в любое время между streamом, Non-Daemon, т.е. stream пользователя выполняется полностью.
  • Потоки Daemon выполняются с низким приоритетом.
  • Потоки Daemon – это streamи, которые периодически работают в фоновом режиме, пока работают другие streamи не-демона.
  • Когда все streamи не-daemon завершены, streamи daemon автоматически завершаются.
  • Потоки Daemon – это поставщики услуг для пользовательских streamов, работающих в одном и том же процессе.
  • JVM не заботится о том, чтобы streamи демона были завершены, когда в Running state, даже не блокируются, также пусть выполняется. JVM предпочитают немодные нити, созданные нами.
  • Темы Daemon действуют как службы в Windows.
  • JVM останавливает streamи демона, когда все пользовательские streamи (в отличие от streamов демона) завершаются. Следовательно, streamи демона могут использоваться для реализации, например, функции мониторинга, поскольку stream останавливается JVM, как только все пользовательские streamи останавливаются.

Одно заблуждение, которое я хотел бы уточнить:

  • Предположим, что если stream streamа (скажем, B) создается в пользовательском streamе (скажем, A); то завершение этого streamа пользователя / родительского streamа (A) не закончится созданным им streamом streamа / дочернего streamа демона (B); если пользовательский stream является единственным в настоящее время.
  • Таким образом, отношения ничто не заканчивается. Все streamи демона (независимо от того, где он создается) завершатся, когда нет ни одного живого пользовательского streamа, и это приведет к завершению работы JVM.
  • Даже это верно для обоих (родительский / дочерний) – это streamи демона.
  • Если дочерний stream создан из streamа демона, то это также stream демона. Это не потребует установки явного флага streamа демона. Аналогично, если дочерний stream, созданный из пользовательского streamа, то это также пользовательский stream, если вы хотите его изменить, то перед началом этого дочернего streamа необходимо установить явный флаг флага демона.

Java имеет специальный stream, называемый streamом демона .

  • Очень низкий приоритет.
  • Выполняется только тогда, когда другой stream одной программы не запущен.
  • JVM завершает программу, завершающую эти streamи, когда streamи демона являются единственными streamами, запущенными в программе.

Для чего используются streamи демона?

Обычно используется в качестве поставщиков услуг для обычных streamов. Обычно имеют бесконечный цикл, который ждет запроса на обслуживание или выполняет задачи streamа. Они не могут выполнять важные задания. (Потому что мы не знаем, когда у них будет время процессора, и они могут закончить любое время, если нет других streamов.)

Типичным примером такого рода streamов является сборщик мусора Java .

Есть больше…

  • Вы вызываете метод setDaemon() до вызова метода start() . Как только stream запущен, вы не можете изменить его статус демона.
  • Используйте isDaemon() чтобы проверить, является ли stream streamом демона или пользовательским streamом.

Темы тем и темы пользователя Daemon. Как правило, все streamи, созданные программистом, представляют собой пользовательский stream (если вы не укажете его как демона, или ваш родительский stream – stream демона). Пользовательский stream обычно предназначен для запуска нашего программного кода. JVM не завершается, если весь пользовательский stream не завершится.

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

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

Демона в Java – это те streamи, которые работают в фоновом режиме и в основном созданы JVM для выполнения фоновой задачи, такой как assembly мусора и другие задачи по поддержанию дома.

Очки для заметок:

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

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

Разница между streamом Daemon и Non Daemon в Java:

1) JVM не дожидается окончания до конца существующего streamа демона.

2) Тема Демона обрабатывается иначе, чем User Thread, когда JVM завершается, наконец, блоки не вызываются, стеки не разматываются, а JVM просто выходит.

Темы Daemon, как объясняют все, не будут препятствовать JVM для выхода, поэтому в основном это счастливый stream для приложения с точки зрения выхода.

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

С уважением, Маниш

Поток Daemon подобен процессу daemon, который отвечает за управление ресурсами, stream демона создается виртуальной машиной Java для обслуживания пользовательских streamов. пример системы обновления для unix, unix – процесс демона. child of daemon thread – это всегда stream демона, поэтому по умолчанию daemon is false. Вы можете проверить stream как демон или пользователя с помощью метода isDaemon (). поэтому процесс демона или процесса демон в основном отвечает за управление ресурсами. например, при запуске jvm работает сборщик мусора, который является streamом демона, приоритет которого равен 1, который является самым низким, который управляет памятью. jvm жив до тех пор, пока пользовательский stream жив, u не может убить демона thread.jvm отвечает за уничтожение streamов деmonoв.

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

 setDaemon(true) 

В Java streamи Daemon являются одним из типов streamа, который не препятствует выходу Java Virtual Machine (JVM). Основной целью streamа демона является выполнение фоновой задачи, особенно в случае некоторой обычной периодической задачи или работы. С выходами JVM stream деmonoв также умирает.

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

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

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

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

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

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

Дополнительная ссылка: stream Daemon в Java

Для меня stream деmonoв – это как хранитель для пользовательских streamов. Если все пользовательские streamи закончены, stream демона не имеет работы и убит JVM. Я объяснил это на видео YouTube .

Давайте поговорим только в коде с рабочими примерами. Мне нравится ответ russ выше, но чтобы устранить любые сомнения, которые у меня были, я немного улучшил его. Я запускал его дважды, один раз, когда рабочий stream был установлен на deamon true (stream деаmonoв), а другой раз установил его в false (пользовательский stream). Он подтверждает, что резьба deamon заканчивается, когда основной stream заканчивается.

 public class DeamonThreadTest { public static void main(String[] args) { new WorkerThread(false).start(); //set it to true and false and run twice. try { Thread.sleep(7500); } catch (InterruptedException e) { // handle here exception } System.out.println("Main Thread ending"); } } class WorkerThread extends Thread { boolean isDeamon; public WorkerThread(boolean isDeamon) { // When false, (ie when it's a user thread), // the Worker thread continues to run. // When true, (ie when it's a daemon thread), // the Worker thread terminates when the main // thread terminates. this.isDeamon = isDeamon; setDaemon(isDeamon); } public void run() { System.out.println("I am a " + (isDeamon ? "Deamon Thread" : "User Thread (none-deamon)")); int counter = 0; while (counter < 10) { counter++; System.out.println("\tworking from Worker thread " + counter++); try { sleep(5000); } catch (InterruptedException e) { // handle exception here } } System.out.println("\tWorker thread ends. "); } } result when setDeamon(true) ===================================== I am a Deamon Thread working from Worker thread 0 working from Worker thread 1 Main Thread ending Process finished with exit code 0 result when setDeamon(false) ===================================== I am a User Thread (none-deamon) working from Worker thread 0 working from Worker thread 1 Main Thread ending working from Worker thread 2 working from Worker thread 3 working from Worker thread 4 working from Worker thread 5 working from Worker thread 6 working from Worker thread 7 working from Worker thread 8 working from Worker thread 9 Worker thread ends. Process finished with exit code 0 

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

Линии демона умирают, когда stream создателя завершается.

Ненонные streamи (по умолчанию) могут даже жить дольше, чем основной stream.

 if ( threadShouldDieOnApplicationEnd ) { thread.setDaemon ( true ); } thread.start(); 

Ниже приведен пример проверки поведения streamов демона в случае выхода jvm из-за отсутствия пользовательских streamов.

Обратите внимание на вторую последнюю строку на выходе ниже, когда основной stream вышел, stream демона также умер и не распечатывал окончательно выполненную инструкцию в блоке finally. Это означает, что любые ресурсы i / o, закрытые в конечном блоке streamа демона, не будут закрыты, если JVM завершится из-за отсутствия пользовательских streamов.

 public class DeamonTreadExample { public static void main(String[] args) throws InterruptedException { Thread t = new Thread(() -> { int count = 0; while (true) { count++; try { System.out.println("inside try"+ count); Thread.currentThread().sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { System.out.println("finally executed"+ count); } } }); t.setDaemon(true); t.start(); Thread.currentThread().sleep(10000); System.out.println("main thread exited"); } } 

Вывод

 inside try1 finally executed1 inside try2 finally executed2 inside try3 finally executed3 inside try4 finally executed4 inside try5 finally executed5 inside try6 finally executed6 inside try7 finally executed7 inside try8 finally executed8 inside try9 finally executed9 inside try10 main thread exited 
  • Приложение C # Windows Forms - обновление GUI из другого streamа и classа?
  • Неправильное ключевое слово C ++ вовлекает забор памяти?
  • Я слышал, что i ++ не является streamобезопасным, is ++ i streamобезопасным?
  • C ++ 11 представил стандартизованную модель памяти. Что это значит? И как это повлияет на программирование на С ++?
  • Как отдать приоритет привилегированной теме при блокировке мьютекса?
  • Как заставить stream Java ждать выхода другого streamа?
  • Обновление ObservableCollection в отдельном streamе
  • 64-разрядные назначения в Java-атоме на 32-битной машине?
  • Что означает этот stream, соединяющий код?
  • резьба qt с движением
  • Синхронизация не конечного поля
  • Interesting Posts

    Что значит ‘&.’ в ‘& .sub-title’ указывает в scss?

    Сохранить сюжет в объекте

    Выполнить JavaScript до и после запуска f: ajax listener

    Исключение BadImageFormatException при загрузке 32-разрядной библиотеки DLL, целью является x86

    Скрытие и отображение вкладок в tabControl

    Ошибка “элемент инициализации не является константой” при попытке инициализировать переменную с константой

    Есть ли способ скопировать пути файлов из всех открытых открытых файлов Windows? (Для сохранения и восстановления сеанса Windows во время перезапуска)

    Медленный запрос при использовании ORDER BY

    Android. Фрагмент getActivity () иногда возвращает null

    Удаленный запуск сценария в Unix, получить выход локально?

    Запуск xcodebuild с разветвленного терминала

    Как очистить термины в поле поиска Firefox после отправки?

    Как изменить цвет шрифта для отключенного ввода?

    Порт USB 3.0 не работает с Windows 10

    Установить лимит на DatePickerDialog в Android?

    Давайте будем гением компьютера.