Кто-нибудь может мне сказать, что такое потоки демона в Java?
Переведено автоматически
Ответ 1
Поток демона - это поток, который не препятствует завершению работы JVM после завершения программы, но поток все еще выполняется. Примером потока демона является сборка мусора.
Вы можете использовать setDaemon(boolean) метод для изменения Thread свойств демона перед запуском потока.
Когда создается новый поток, он наследует статус демона своего родителя.
Когда все потоки, не являющиеся демонами, завершаются, JVM останавливается, и все оставшиеся потоки демонов прекращаются:
в конечном итоге блоки не выполняются,
стеки не разматываются - JVM просто завершает работу.
По этой причине потоки демона следует использовать экономно, и опасно использовать их для задач, которые могут выполнять любой вид ввода-вывода.
Ответ 3
Все приведенные выше ответы хороши. Вот небольшой простой фрагмент кода, иллюстрирующий разницу. Попробуйте проделать это с каждым из значений true и false в setDaemon.
publicWorkerThread() { // When false, (i.e. when it's a non daemon thread), // the WorkerThread continues to run. // When true, (i.e. when it's a daemon thread), // the WorkerThread terminates when the main // thread or/and user defined thread(non daemon) terminates. setDaemon(true); }
publicvoidrun() { intcount=0;
while (true) { System.out.println("Hello from Worker "+count++);
Традиционно демоническими процессами в UNIX были те, которые постоянно выполнялись в фоновом режиме, во многом как службы в Windows.
Поток демона в Java - это поток, который не препятствует завершению работы JVM. В частности, JVM завершит работу, когда останутся только потоки демона. Вы создаете его, вызывая setDaemon() метод на Thread.