Daemon потоки в Java
#java #concurrency
Несколько фактов про Daemon потоки в Java:
1) В Java есть два вида потоков: User и Daemon
2) JVM будет ждать завершения всех User потоков (не Daemon)
3) Если были завершены все User потоки, то JVM не будет ждать завершения работы Daemon потоков. JVM просто завершит свою работу. Никакие finally блоки в Daemon потоках также не будут выполнены. Поэтому не рекомендуется производить никакие I/O операции в Daemon потоках.
4) Из 3) есть исключение. Если был вызов .join() на выполняющемся Daemon потоке, то это может помешать завершению работы JVM. Поэтому это не рекомендуется делать.
5) Daemon потоки обычно используется для вспомогательной логики. Потоки самой JVM (например GC) являются Daemon потоками.
6) Чтобы сделать поток Daemon, нужно вызвать .setDaemon(true);
7) Если вызвать setDaemon после start(), то это приведет к IllegalThreadStateException. Вызов нужно делать после создания потока, но перед start
8) Daemon флаг наследуется от родительского потока. Если вы в Daemon потоке создали еще один поток, то он будет Daemon по умолчанию.
8) Daemon потоки имеют более низкий приоритет по сравнению с другими потоками
Post #155
1.26K
- 👍 9