Подтвердить что ты не робот

Как создать поток демона? и зачем?

Я не могу понять использование и назначение потоков демона.

Для чего они нужны? Как я могу их использовать? Кроме того, я пытался создавать демоны, но не мог.

class Evil implements Runnable {
    public static void main(String[] arg) throws Exception {
        Thread t = new Thread(new Evil());
        t.start();
        Thread.sleep(1000);
        t.setDaemon(true);//no success, error!
    }

    public void run() {
        try {
            Thread.sleep(1000);
            System.out.println("How would it be Evil!?");
            Thread.sleep(1000);
        } catch (Exception e) {
        }
    }
}

Это то, что я пытался сделать до сих пор, но он не работает должным образом.

4b9b3361

Ответ 1

Сначала вам нужно установить поток в качестве демона непосредственно перед его запуском, так что первое, что было бы так:

 Thread t = new Thread(new Evil());
 t.setDaemon(true);//success is here now
 t.start();
 Thread.sleep(1000);

Демон-потоки похожи на обычные (пользовательские) потоки, но есть большая разница. JVM убивает (останавливает) приложение, когда нет пользовательского потока (живого), другими словами, если у вас есть 1 пользовательский поток (например, основной поток) и 1000 потоков демонов, здесь JVM видит один поток в вашем приложении и он убивает приложение сразу после того, как основной поток завершает работу.

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

Итак, в вашем случае, когда поток демона ждет 1 секунду и говорит что-то и снова спят в течение 1 секунды, потому что это демон, а основные потоки уже не через 1 секунду, тогда поток демона никогда не достигает второй линии сна.

Эта (диаграмма) может вам тоже помочь. from arashmd.blogspot.com

Ответ 2

Javadoc для Thread.setDaemon(boolean) гласит:

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

Этот метод должен быть вызван до запуска потока.

Хорошим примером для потока deamon является таймер.

Не имеет смысла, что таймер срабатывает еще раз, если нет больше пользовательских потоков.

Ответ 3

  • Нищие демона не являются злыми (хотя технически они могут делать зло вещи).
  • Вы не можете создать демон потоков после его запуска.
  • Вы использовали бы поток демона в качестве фонового потока, который не должен/не должен препятствовать закрытию программы.

Ответ 4

Перед запуском потока

необходимо установить статус Daemon.

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