Как только пользовательский поток начал выполняться, его нельзя преобразовать в daemon-поток. Это фундаментальное ограничение в модели потоков Java.
Если попытаться преобразовать активный пользовательский поток в daemon-поток, вызвав setDaemon(), будет выброшено исключение IllegalThreadStateException. Это исключение выбрасывается потому, что состояние потока уже прошло ту точку, в которой можно изменить daemon-статус.
Метод setDaemon() можно вызывать только на потоке, который ещё не начал выполняться. Статус daemon должен быть установлен до вызова метода start().
Thread thread = new Thread(new MyRunnable());
thread.setDaemon(true); // Установи статус daemon ДО запуска
thread.start(); // Теперь запусти поток
Всегда настраивай daemon-свойства во время фазы инициализации потока, до начала выполнения. Требования к потокам нужно продумывать заранее — это необходимо для правильного управления его жизненным циклом.
Метод setDaemon() выбросит IllegalThreadStateException, если его вызвать на потоке, который уже был запущен.
Новый — ещё не проверен сообществом
Вы