Что должен сделать поток, чтобы не остановить выход виртуальной машины? - PullRequest
0 голосов
/ 01 марта 2012

Недавно я прочитал «Сетевое программирование Java», в разделе 5.5, часть 5.5.2.6, он имеет следующий код:

public TimeSlicer(long milliseconds, int priority) {

    this.timeslice = milliseconds;

    this.setPriority(priority);

    // If this is the last thread left, it should not
    // stop the VM from exiting

    this.setDaemon(true);

}

просто не совсем понимаю комментарии, каковы отношенияпоток демона с выходом из виртуальной машины? Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 01 марта 2012

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

Из документации java.lang.Thread :

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

0 голосов
/ 01 марта 2012

Если все, что вы main() делаете, это создаете поток с бесконечным циклом (например, while (true) {try {sleep (1000);} catch (Exception e) {} `then

  • если поток не является демоном, то ваша программа будет работать вечно
  • , если поток равен , демон выйдет из программы, уничтожив поток демона

В частности, установка потока в качестве демона не делает процесс демоном, который работает в фоновом режиме. Для этого см. этот ответ, который я написал некоторое время назад

...