В настоящее время я сталкиваюсь с проблемой при выполнении следующего потока в моем веб-приложении:
return new Runnable() {
@Override
public void run() {
long lastHeartBeat = -1;
while (true) {
if (isFullAbortRequested()) {
break;
}
if (lastHeartBeat == -1 || lastHeartBeat + 1000 * 60 < new Date().getTime()) {
// once every x minutes send a "i'm still alive!"
DEFAULT_LOGGER.info("still alive!");
lastHeartBeat = new Date().getTime();
}
//DO SOMETHING THAT TAKES 1 MIN
try {
Thread.sleep(1000);
} catch (final InterruptedException e) {
DEFAULT_LOGGER.error("CACHE REFRESH SERVICE DOWN");
}
}
}
};
Проблема с этим состоит в том, что через несколько дней он просто останавливается (без каких-либо известныхпричина).Является ли это «ожидаемым поведением» в таких «в то время (истинном) спящем» потоках, что они могут быть закрыты ОС (?) Или чем-то еще?
Каким будет долговременное решение для этого, проверяйте каждую секунду, еслиВы должны что-то сделать, и если да, то сделать это (это может занять 1 минуту). Затем подождите секунду до следующей проверки "?Действия в "DO SOMETHING" никогда не должны парализовать или перекрываться, поэтому они должны блокировать этот поток.
Заранее спасибо!