Потоки демона похожи на сервис-провайдеров для других потоков или объектов, работающих в том же процессе, что и поток демона. Потоки демона используются для фоновых задач поддержки и нужны только во время выполнения обычных потоков. Если обычные потоки не запущены, а остальные потоки являются потоками демона, интерпретатор завершает работу.
Например, браузер HotJava использует до четырех потоков демонов с именем «Image Fetcher» для извлечения изображений из файловой системы или сети для любого потока, который в них нуждается.
Потоки демона обычно используются для выполнения сервисов для вашего приложения / апплета (например, загрузка "битов фиддли"). Основное различие между пользовательскими потоками и потоками демонов состоит в том, что JVM закроет программу только после завершения всех пользовательских потоков. Потоки демона завершаются JVM, когда пользовательские потоки больше не работают, включая основной поток выполнения.
setDaemon (true / false)? Этот метод используется для указания того, что поток является потоком демона.
public boolean isDaemon ()? Этот метод используется для определения того, является ли поток потоком демона или нет.
Например:
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>