Java долгосрочная тема - PullRequest
       26

Java долгосрочная тема

0 голосов
/ 29 сентября 2018

В настоящее время я сталкиваюсь с проблемой при выполнении следующего потока в моем веб-приложении:

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" никогда не должны парализовать или перекрываться, поэтому они должны блокировать этот поток.

Заранее спасибо!

...