Java线程池提供了一种优雅地停止正在执行的任务的方法,可以通过调用shutdown()
方法来停止线程池的执行,并等待所有已提交的任务执行完成。具体步骤如下:
shutdown()
方法来停止线程池的执行。ExecutorService executor = Executors.newFixedThreadPool(10);
executor.shutdown();
awaitTermination()
方法来等待所有已提交的任务执行完成,或者指定一个超时时间。try {
if (!executor.awaitTermination(60, TimeUnit.SECONDS)) {
executor.shutdownNow(); // 如果超时,强制停止所有正在执行的任务
}
} catch (InterruptedException e) {
executor.shutdownNow(); // 如果发生异常,强制停止所有正在执行的任务
}
在调用awaitTermination()
方法时,可以指定一个超时时间,如果超过了指定的时间,但仍有任务未执行完成,则返回false。此时,可以调用shutdownNow()
方法来强制停止所有正在执行的任务。
isShutdown()
和isTerminated()
方法。Runnable task = new Runnable() {
public void run() {
// 执行任务逻辑
if (executor.isShutdown() && !executor.isTerminated()) {
// 执行清理操作
}
}
};
注意,调用shutdown()
方法只会停止线程池接受新的任务,并不会停止已经提交的任务的执行。要停止正在执行的任务,需要配合awaitTermination()
和shutdownNow()
方法使用。