java长期线程

时间:2018-09-29 09:59:05

标签: java multithreading runnable timing

我目前面临在Web应用程序中执行以下线程的挑战:

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");
                    }
                }

            }
        };

此问题的原因是几天后它停止(没有任何已知原因)。这是此类“ while(true)睡眠”线程上的“预期行为”,它们可能会被OS(?)或其他任何功能关闭吗?

对于这种“如果必须做某事,每秒检查一次,如果是,请每秒检查一次(可能需要1分钟)。然后在下一次检查之前等待一秒钟”,将是一种持久的解决方案吗? “做某事”中的操作绝不能并行化或重叠,因此它们应对此线程阻塞。

提前谢谢!

0 个答案:

没有答案