Java 如何使用stopfile方法优雅地停止executorservice

Java 如何使用stopfile方法优雅地停止executorservice,java,multithreading,executorservice,Java,Multithreading,Executorservice,我有一个每天执行线程数的要求。每个线程都执行一些任务。我试图解决的问题是,是否使用作为参数传递的stopfile优雅地终止executor服务 我使用的方法是在线程的run方法中检查stopfile,但它将对所有剩余任务执行空运行。相反,我正在寻找一种方法来停止Executor服务本身中的任务。有没有办法做到这一点 我在看这篇文章: 有人能在这方面做更多的扩展吗 我使用的方法是在线程的run方法中检查stopfile,但它将对所有剩余任务执行空运行。相反,我正在寻找一种方法来停止Executor

我有一个每天执行线程数的要求。每个线程都执行一些任务。我试图解决的问题是,是否使用作为参数传递的stopfile优雅地终止executor服务

我使用的方法是在线程的run方法中检查stopfile,但它将对所有剩余任务执行空运行。相反,我正在寻找一种方法来停止Executor服务本身中的任务。有没有办法做到这一点

我在看这篇文章:

有人能在这方面做更多的扩展吗

我使用的方法是在线程的run方法中检查stopfile,但它将对所有剩余任务执行空运行。相反,我正在寻找一种方法来停止Executor服务本身中的任务。有没有办法做到这一点

我认为停止
ExecutorService
的正确方法是使用
ExecutorService.shutdownNow()方法。这将取消所有尚未运行的作业,并中断所有正在运行的线程

要测试中断,您的任务应执行以下操作:

while (!Thread.currentThread().isInterrupted()) {
    ...
}
在捕捉到中断异常的任何地方,都需要确保重新启用中断标志:

try {
    // something that throws InterruptedException
} catch (InterruptedException e) {
    Thread.currentThread().interrupt();
    // maybe we should quit the thread here
}
如果您使用的第三方库可能会占用
InterruptedException
,那么您可能必须使用
executorservice.shutdown()
,该库将取消作业,但不会中断线程。然后,您应该共享某种类型的
volatile boolean shutdown
标志(或
AtomicBoolean
),并在运行方法中执行一些操作:

while (!Thread.currentThread().isInterrupted() && !shutdown) {
    ...
}
顺便说一句,您提到了“线程的运行方法”。为了确保这一点,您应该实现
Runnable
,并将其提交给
ExecutorService
。您不应该提交
线程
实例