Multithreading 如何正确关闭Executor服务?

Multithreading 如何正确关闭Executor服务?,multithreading,threadpool,executorservice,scheduledexecutorservice,Multithreading,Threadpool,Executorservice,Scheduledexecutorservice,我有一个ScheduledExecutorService调度器,它可以scheduleAtFixRate执行一些任务。 每个任务都有一个ExecutorService executor=Executors.newFixedThreadPool(poolSize) 这些执行者将执行子任务。我有一个关闭钩子,它调用scheduler.shutdown()和scheduler.shutdownNow() 但是这会关闭子任务中的所有线程吗?我的理解是这样做只会向线程发送中断信号 但这取决于线程何时停止

我有一个
ScheduledExecutorService调度器
,它可以
scheduleAtFixRate
执行一些任务。 每个任务都有一个
ExecutorService executor=Executors.newFixedThreadPool(poolSize)

这些执行者将执行子任务。我有一个关闭钩子,它调用
scheduler.shutdown()
scheduler.shutdownNow()

  • 但是这会关闭子任务中的所有线程吗?我的理解是这样做只会向线程发送中断信号 但这取决于线程何时停止
  • 当我用Ctrl+C终止我的程序时,有时我看到(根据输出日志)我的关闭挂钩运行,有时我看不到。 如何保证在我的设置中顺利关机
  • 是否有必要在每个任务中设置某种标志,并在关机时更改它,以通知线程停止或调用
    调度程序。shutdown()
    就足够了
  •     scheduler.shutdown();
    
        try {
            scheduler.awaitTermination(threadTimeout, TimeUnit.MINUTES)
        } catch(InterruptedException e) {
            scheduler.shutdownNow();
        }