Java 线程池阻塞队列,总是执行最后几个

Java thread pool blocking queue, execute always last few

我有几个任务正在由某个事件创建。我想一直执行最后几个任务(假设 6)。

我使用的是固定线程池。但我面临的问题是,它在内部使用阻塞队列。如果有新任务进入,我想将任务从阻塞队列中取出,而不是将它们推送给执行程序。我怎样才能做到这一点?是否有解决此问题的不同方法?

为了做你想做的事,你可以使用ScheduledThreadPoolExecutor。并设置标志 setRemoveOnCancelPolicy(true).

当您调用 submit 方法时,此执行器 returns 一个 Future。这些期货有一个 cancel() 方法,您可以在新请求到来时调用该方法。如果您愿意,您甚至可以取消当前 运行 的任务。

还有另一种方法可以调用 ThreadPoolExecutor.getQueue().clear(),但这并不安全!所以请不要尝试:)