Я думаю, вы неправильно понимаете, что такое поток демона.
См. Что такое поток демона в java
В целом, это в основном означает, что поток демона не долженне делать никаких операций ввода-вывода или удерживать какие-либо ресурсы.Если вы нарушаете это основное правило, то ваш поток не может считаться потоком демона.
Добавление перехватчика завершения работы - это стандартный способ обеспечения того, чтобы ваш код вызывался до завершения JVM, но даже это не гарантируется на 100% - например, ваша JVM может аварийно завершить работу, что приведет к тому, что ОС приведет к очистке ресурсовспособ, который защищает ОС, но вполне вероятно оставляет ваше приложение в несогласованном / ошибочном состоянии.
Системные контрольные точки и механизмы восстановления восходят к ранним дням разработки программного обеспечения (например, к операционным системам и пакетным операциям), и, к сожалению, это колесо продолжает изобретаться заново, так как не существует подхода «серебряной пули» (API)которая решает эту проблему достаточно общим образом.