我对ThreadPoolExecutor有一个非常简单的问题。我有以下情况:我必须使用队列中的对象,为它们创建适当的工作程序任务,然后将其提交给ThreadPoolExecutor。这很简单。但是在关闭情况下,
许多
工作人员可能会排队等待执行。由于这些任务之一可能正在运行一个小时,而且我希望相对快速地正常关闭应用程序,因此我想从ThreadPoolExecutor中丢弃所有排队的任务,而已处理的任务应正常完成。
ThreadPoolExecutor文档具有remove()方法,但仅允许删除特定任务。purge()仅适用于已取消的Future任务。我的想法是清除容纳所有排队任务的队列。ThreadPoolExecutor提供对此内部队列的访问,但文档指出:
方法getQueue()允许访问工作队列,以进行监视和调试。强烈建议不要将此方法用于任何其他目的。
因此,抓住这个队列并清除它不是一个选择。此外,此文档的片段说明:
当取消大量排队的任务时,可以使用提供的两个方法remove(java.lang.Runnable)和purge()来辅助存储回收。
怎么样?当然,我可以维护提交给执行程序的所有任务的列表,在关机的情况下,我可以遍历所有条目并使用remove()方法将它们从ThreadPoolExecutor中删除…但是…来吧,这是一个浪费内存和维护此列表的麻烦。(例如,删除已经执行的任务)
我感谢任何提示或解决方案!
您是否考虑过包装ExecutorService?创建一个
CleanShutdownExecutorService implements Executor
将所有呼叫委托给另一位执行者,但将期货保留在其自己的列表中。CleanShutdownExecutorService然后可以具有cancelRemainingTasks()方法,该方法调用shutdown(),然后对其列表中的所有Future调用cancel(false)。
我安装了Rabbitmqadmin,并能够列出所有的交换和队列。如何使用Rabbitmqadmin或Rabbitmqctl删除所有队列。
问题内容: 我以为那不是难事,但我想用String.replaceAll删除所有空行(或Java中仅包含空白和制表符的行)。 我的正则表达式如下所示: 但这是行不通的。 我环顾四周,但仅发现用于删除空白行而不包含空格或制表符的正则表达式。 问题答案: 试试这个: 请注意,正则表达式匹配空格,制表符或管道字符! 编辑 顺便说一句,正则表达式也可以解决问题。
问题内容: 在Hibernate中删除表中所有行 的最佳方法是什么? 如果我遍历一个集合并称其在我所知范围内没有执行。 如果使用其他选项,则不会影响持久性上下文。 如果没有更好的选择,何时应该使用这些方法? 问题答案: 如果没有什么要层叠的,请使用HQL删除 如果您有层叠,请迭代该集合并分别删除每个集合。 问题出在以下事实:hibernate在内部处理级联,而不是将其留给数据库。因此,发送查询不会
问题内容: 我需要删除JTable中的所有行。 我已经尝试了以下两种方法: 和 两者都不会删除所有行。有任何想法吗? 问题答案: 以下代码为我工作:
问题内容: 我想删除DefaultTable的所有行。我发现有两种常见的方法可以在Internet上删除它们,但是在我的情况下它们都不起作用,因为这些方法在DefaultTableModel中不存在。我想知道为什么:S。我使用DefaultTableModel的代码是 DefaultTableModel Table =(DefaultTableModel)Table.getModel(); 删除的
我的取消排队方法目前也不会删除我想要的项,而是从集合中删除最后一个元素。例如 如果我添加元素:1,2,3我的toString方法将按预期返回1,2,3。 然后,当我使用我的驱动程序调用 dequeue 时,它应该取消第 0 个元素的排队,在本例中为 1。 尽管该方法表示“已从队列中删除元素1”,提示<code>T result 然后,当我再次调用enqueue方法时,在同一个队列上,如果我将字符串