Рубрики
Без рубрики

Поток демона в Java

Поток демона в Java, Пример потока демона Java, что такое поток демона, Поток.setDaemon(true), преимущества потока демона, недостатки потока демона

Автор оригинала: Pankaj Kumar.

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

Поток демона в java

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

Thread.setDaemon(true) используется для создания потока демона в java. Этот метод должен быть вызван до запуска потока, иначе он вызовет Исключение IllegalThreadStateException .

Мы можем проверить, является ли поток потоком демона или нет, вызвав для него метод isDaemon () .

Другой момент заключается в том, что при запуске поток наследует статус демона своего родительского потока.

Поток демона в примере Java

Давайте рассмотрим небольшой пример потока демона в java.

package com.journaldev.threads;

public class JavaDaemonThread {

    public static void main(String[] args) throws InterruptedException {
        Thread dt = new Thread(new DaemonThread(), "dt");
        dt.setDaemon(true);
        dt.start();
        //continue program
        Thread.sleep(30000);
        System.out.println("Finishing program");
    }

}

class DaemonThread implements Runnable{

    @Override
    public void run() {
        while(true){
            processSomething();
        }
    }

    private void processSomething() {
        try {
            System.out.println("Processing daemon thread");
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    
}

Когда мы выполняем вышеуказанную программу потока демона, JVM создает первый поток пользователя с помощью метода main () , а затем поток демона.

Когда основной метод завершен, программа завершается, и поток демона также завершается JVM.

На рисунке ниже показан результат работы вышеуказанной программы.

Если мы не настроим поток “dt” для запуска в качестве потока демона, программа никогда не завершится даже после завершения выполнения основного потока. Обратите внимание , что Поток демона имеет цикл while true с потоком сна , поэтому он никогда не завершится сам по себе.

Попробуйте прокомментировать инструкцию, чтобы установить поток в качестве потока демона и запустить программу. Вы заметите, что программа работает бесконечно, и вам придется вручную выйти из нее.

Использование потока демона

Обычно мы создаем поток демона для функций, которые не являются критичными для системы. Например, поток ведения журнала или поток мониторинга для сбора сведений о системных ресурсах и их состоянии. Если вы не в порядке, будет ли поток завершаться, не создавайте его как поток демона.

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

Ссылка: API Doc