2

我有一个ExecutorService执行任务,它本身向 ExecutorService 提交新任务。

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

ExecutorService关闭时如何仍然允许任务提交子任务?

4

2 回答 2

2

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

于 2012-11-30T09:25:05.590 回答
0

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

于 2013-10-01T12:57:40.423 回答