Netty Server завершает работу с живыми потоками в JVM - PullRequest
1 голос
/ 20 сентября 2019

В этом doc указано, что JVM не останавливает процесс JAVA, если в процессе присутствуют потоки, не являющиеся демонами.

Когда запускается виртуальная машина Javaобычно существует единственный поток, не являющийся демоном (который обычно вызывает метод с именем main некоторого назначенного класса).Виртуальная машина Java продолжает выполнять потоки, пока не произойдет одно из следующих действий:

  • Был вызван метод выхода класса Runtime, и диспетчер безопасности разрешил выполнение операции выхода.
  • Все потоки, которые не являются потоками демонов, умерли, либо возвратившись из вызова метода run, либо выдав исключение, которое распространяется за пределы метода run.

Я проверил это с запуском автономных Thread, ExecutorService и NioEventLoopGroup, и это работает, как указано выше.

Но для этого примера Netty Echo Server он сообщает после :

75              // Wait until the server socket is closed. 
76              f.channel().closeFuture().sync();

Если я удаляю эту строку, код завершается дажехотя в процессе присутствуют нити-демоны.

Может кто-нибудь объяснить, почему?

...