首页 > 解决方案 > 如何删除 ExecutorService 中所有正在运行和排队的任务并向其中添加新任务?

问题描述

如何删除所有正在运行和排队的任务ExecutorService并向其中添加新任务?

每一轮都有一个ExecutorService新的任务来处理。
如果本轮任务没有完成,则删除这些旧任务并在下一轮添加新任务。ExecutorService将在下一轮重复使用,因此ExecutorService无法关闭。
有人知道该怎么做吗?

标签: javaexecutorservice

解决方案


如何删除 ExecutorService 中所有正在运行和排队的任务并向其中添加新任务?

添加很容易 - 只需调用submit. 另一方面,移除比较棘手——你可以跟注shutdownNow。文档:

尝试停止所有正在执行的任务,停止等待任务的处理,并返回等待执行的任务列表。

但是shutdownNow()实际上会关闭执行程序,因此它将拒绝接受新任务。另外,请注意 Javadoc 中的单词尝试。一旦任务开始执行,就不能保证它可以很容易地停止。任务可以忽略interrupt并继续运行。

如果您想要更精细的控制,请不要使用ExecutorService. 相反,请尝试ThreadPoolExecutor实现ExecutorService. 在 aThreadPoolExecutor中,您可以直接访问 Runnables 队列。


推荐阅读