具有任务链关闭的ExecutorService

时间:2012-11-30 09:18:27

标签: java multithreading executor

我有ExecutorService执行自己向ExecutorService提交新任务的任务。

当我调用.shutdown()时,我希望正在运行的任务仍然能够向ExecutorService提交需要完成的新任务。但我不希望能够从外部向ExecutorService提交新任务。

ExecutorService关闭时,如何才允许任务提交子任务?

2 个答案:

答案 0 :(得分:2)

在您调用shutdown之后,您不应该提交任何新任务,这是违反逻辑的。
为内部任务使用不同的执行程序服务。或者为自己创建一个执行程序(包装或扩展您选择的执行程序),它能够检查提交者,并根据其状态允许或不允许提交任务。

答案 1 :(得分:0)

查看ForkJoinPool,这也是ExecutorService。在ForkJoinTasks中,您可以拨打ForkJoinPool.fork()而不是标准execute()。关闭时,仍然允许fork()s,而execute()s则不允许。但是,由于行为的各种其他差异,ForkJoinPool可能不适合手头的任务(多个队列而不是一个,工作窃取等) 请查看此处的文档:http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ForkJoinPool.html