我有一个ExecutorService
执行任务,它本身向 ExecutorService 提交新任务。
当我打电话时.shutdown()
,我希望正在运行的任务仍然能够向需要完成的 ExecutorService 提交新任务。但我不希望能够从外部提交新任务到ExecutorService
.
ExecutorService
关闭时如何仍然允许任务提交子任务?
我有一个ExecutorService
执行任务,它本身向 ExecutorService 提交新任务。
当我打电话时.shutdown()
,我希望正在运行的任务仍然能够向需要完成的 ExecutorService 提交新任务。但我不希望能够从外部提交新任务到ExecutorService
.
ExecutorService
关闭时如何仍然允许任务提交子任务?
调用shutdown后,不应该提交任何新任务,这是违反逻辑的。
为内部任务使用不同的执行器服务。或者为自己创建一个执行器(包装或扩展您选择的执行器),它能够检查提交者并根据其状态允许或不允许提交任务。
看看ForkJoinPool
,这也是一个ExecutorService
。在 ForkJoinTasks 中,您可以调用ForkJoinPool.fork()
而不是标准的execute()
. 关闭时,仍然允许使用 fork(),而不允许使用 execute()。但是,由于行为上的各种其他差异,ForkJoinPool
可能不适合手头的任务(多个队列而不是一个,工作窃取等)请查看此处的文档:http: //docs.oracle.com /javase/7/docs/api/java/util/concurrent/ForkJoinPool.html