В моем приложении Spring есть планировщик для выполнения некоторой задачи.Запланированные аннотации там не используются, потому что расписание довольно сложное - оно динамическое и использует некоторые данные из базы данных.Так что используется простой бесконечный цикл со спящим потоком.И интервал сна меняется по некоторым правилам.Может быть, все это можно сделать с помощью запланированной аннотации, но вопрос не в этом.
Ниже приведен простой пример:
@Service
public class SomeService {
@PostConstruct
void init() {
new Thread(() -> {
while (true) {
System.out.println(new Date());
try {
Thread.sleep(1000);
} catch (Exception ex) {
System.out.println("end");
return;
}
}
}).start();
}
}
Код работает нормально, но есть некоторые проблемы с его уничтожением.новый поток.Когда я останавливаю приложение от Tomcat, этот новый поток продолжает работать.Итак, на странице управления Tomcat я вижу, что приложение остановлено, но в лог-файлах Tomcat я все еще вижу вывод из потока.
Так в чем проблема?Как мне изменить код, чтобы поток был убит при остановке приложения?