我有一些执行器服务可以安排本地任务,例如读取文件、连接到数据库等。这些进程会进行大量的日志记录,这是基于有很多线程并发运行的事实,这是很广泛的,写他们自己的东西进入日志。
现在,在某个时间点可以引发异常,它到达捕获所有异常的 main 方法。然后我将关闭所有服务并取消每项任务,希望阻止所有进一步的消息进入日志。不幸的是,在我关闭所有内容后,这些消息仍然出现...有什么想法吗?
更新: 这是一些代码
public class Scheduler{
private final ExecutorService service;
private final ConcurrentMap<Object, Future<V>> cache;
...
public void shutDown() {
service.shutdownNow();
for (Future task : cache.values())
task.cancel(true);
}
最佳答案
任务将继续运行,直到它检测到线程已被中断。当调用某些系统或线程函数时可能会发生这种情况,您可能会抛出异常。在你的情况下,你可能需要通过调用
来检查自己Thread.currentThread().isInterrupted()
如果您的代码运行循环并且您希望以这种方式停止,那么这样做是个好主意。
关于Java - 停止 ExecutorService 中的所有任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13642723/