我有一些事件正在创建的任务。我想总是执行最后几个任务(假设6)。
我正在使用固定的线程池。但我面临的问题是,它在内部使用阻塞队列。如果有新任务进入,我想从阻塞队列中将任务出列,而不是将它们推送到执行程序。我怎样才能做到这一点?这个问题有不同的方法吗?
答案 0 :(得分:0)
为了做你想做的事,你可以使用ScheduledThreadPoolExecutor
。并设置标志setRemoveOnCancelPolicy(true)
。
当您调用Future
方法时,此执行程序返回submit
。这些期货有一个cancel()
方法,您可以在新请求进入时调用。您甚至可以取消当前正在运行的任务。
还有另一种叫ThreadPoolExecutor.getQueue().clear()
的替代方案,但这不安全!所以请不要尝试:)