Java - 停止 ExecutorService 中的所有任务

标签 java concurrency executorservice

我有一些执行器服务可以安排本地任务,例如读取文件、连接到数据库等。这些进程会进行大量的日志记录,这是基于有很多线程并发运行的事实,这是很广泛的,写他们自己的东西进入日志。

现在,在某个时间点可以引发异常,它到达捕获所有异常的 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/

相关文章:

java - 将 jvm 参数传递给 Gradle 测试任务

php - PHP 和并发中静态成员的作用域

java - 更改 ScheduledThreadPoolExecutorService 的延迟而不终止服务

java - 如何立即停止使用 ExecutorService 启动的任务?

java - 如何处理 IntutTypeMismatchException 以再次从用户那里获取正确的输入而不重新运行程序?

java - 使用 Java 从 Azure API 获取 CPU 使用情况

java - 使用 Android 应用程序调用 Textview 值

c++ - 在线程之间共享数据时如何从不变性中获益?

java - Java中线程的终止条件

java - 如何限制使用Java服务的线程数