我有几个任务是由某个事件创建的。我想总是执行最后几项任务(假设6)。
我使用的是固定线程池。但我面临的问题是,它在内部使用了阻塞队列。如果有新任务进入,我想将任务从阻塞队列中移出,而不将它们推送到执行器。我怎样才能做到这一点?有没有不同的方法来解决这个问题?
为了执行您想要的操作,您可以使用ScheduledThreadPoolExecutor
。并设置标志CCD_ 2。
当您调用submit
方法时,此执行器返回一个Future
。这些futures有一个cancel()
方法,您可以在收到新请求时调用它。如果您愿意,您甚至可以取消当前正在运行的任务。
还有另一种方法可以调用ThreadPoolExecutor.getQueue().clear()
,但这并不安全!所以请不要尝试:)