поток демона должен завершиться в то же время, что и основной поток? - PullRequest
0 голосов
/ 16 апреля 2020

Насколько я понимаю, поток демона уничтожается, как только основной поток существует (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");
                }
            }
...