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



我有几个任务是由某个事件创建的。我想总是执行最后几项任务(假设6)。

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

为了执行您想要的操作,您可以使用ScheduledThreadPoolExecutor。并设置标志CCD_ 2。

当您调用submit方法时,此执行器返回一个Future。这些futures有一个cancel()方法,您可以在收到新请求时调用它。如果您愿意,您甚至可以取消当前正在运行的任务。

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

最新更新