我以这种方式实现了长时间运行的线程:
'fun’ was not declared
在main函数中,我将它们添加到执行程序中:
public class LongRunningWorker implements Runnable {
@Override
public void run() {
try {
while (!Thread.currentThread().isInterrupted()) {
// get a job from threadsafe job queue and run it.
Job job = jobQueue_.removeJob();
execute(job);
TimeUnit.SECONDS.sleep(workerSleepSec_);
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
} finally {
LOGGER.info("runner quit");
// Clean up
cleanup();
}
}
}
事实证明LongRunningWorker并不总是在运行。经过几个小时的执行,我发现了所有那些LongRunningWorker退出。为什么?如果我想让它一直运行,怎么做?
答案 0 :(得分:2)
您似乎不明白ExecutorService的要点:没有必要"手动"保持这些线程活着。 框架会为您做到这一点。
换句话说:ExecutorService的想法是你只需继续向其提交任务。底层实现为您管理线程。当你去fixed thread pool service时,请放心,你将始终使用给定的线程数运行。
编辑:给出您的评论 - 如果您的主要关注点是"资源"需要与使用它们的线程一起管理;然后我看到两个选择:
编辑:进一步考虑您的问题...您应该检查是否存在导致线程停止的其他问题(如未捕获的异常)。也许你可以尝试寻找更广泛的例外。