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

时间:2015-02-15 08:35:50

标签: java multithreading threadpool threadpoolexecutor

我有一些事件正在创建的任务。我想总是执行最后几个任务(假设6)。

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

1 个答案:

答案 0 :(得分:0)

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

当您调用Future方法时,此执行程序返回submit。这些期货有一个cancel()方法,您可以在新请求进入时调用。您甚至可以取消当前正在运行的任务。

还有另一种叫ThreadPoolExecutor.getQueue().clear()的替代方案,但这不安全!所以请不要尝试:)