【发布时间】:2015-07-15 12:08:27
【问题描述】:
我的应用程序需要异步完成某项工作,所以我求助于执行器框架。如果某个外部接口关闭(供应商可能会备份一段时间,例如 30 分钟),则该作业(Runnable)预计会运行。
考虑到这个问题,我认为我应该维护一个固定编号的预定执行器服务。当我上面所说的接口短暂关闭时执行这些工作的核心线程的数量(作为我需要线程池的类中的static 变量)。我也不认为我应该为处理此类作业的每个需要创建一个执行器(单个计划的线程池执行器),并在作业运行后关闭,因为这会破坏我的目的,不是吗?因为这可能意味着在备份时间内为每个作业保留一个线程,这对我来说听起来很可怕。
但是,如果我要维护这样一个 executor 服务,我什么时候会关闭 executor?我知道执行器一旦关闭就不能被重用,而不关闭执行器并保持线程处于活动状态可能会阻止 JVM 关闭。我该怎么办?
我最后的声明是基于Effective Java 2nd edition:
这里是如何告诉执行者优雅地终止(如果你 如果不这样做,您的虚拟机可能不会退出):
executor.shutdown();
【问题讨论】:
标签: java multithreading scheduledexecutorservice