Насколько я понимаю, поток демона уничтожается, как только основной поток существует (JVM завершен), поэтому строка
поток демона, но вы не увидите эту строку, потому что основной поток завершается, так же как и этот поток.
в приведенном ниже фрагменте кода в любом случае не появится, однако он появится. Почему это так?
Я запустил программу как в IntelliJ IDE (с JDK 1.8), так и из командной строки (JDK 11), результаты были одинаковыми:
Основной поток существует
Поток демона, но вы не увидите эту строку, поскольку основной поток завершается, так же как и этот поток.
Вы увидите меня даже после того, как основной поток существует.
public class DaemonThread {
public static void main(String[] args) throws InterruptedException {
Thread t1 = new Thread(()->{
try {
Thread.sleep(500);
System.out.println("Daemon thread, but you won't see this line, because main thread exits, so does this thread.");
} catch (InterruptedException e) {
e.printStackTrace();
}
});
t1.setDaemon(true);
t1.start();
Thread t2 = new Thread(()->{
try {
Thread.sleep(500);
System.out.println("You will see me even after the main thread exists.");
} catch (InterruptedException e) {
e.printStackTrace();
}
});
t2.setDaemon(false);
t2.start();
Thread.sleep(200); //Main thread
System.out.println("Main thread exists");
}
}