Java 线程池阻塞队列,总是执行最后几个
Java thread pool blocking queue, execute always last few
我有几个任务正在由某个事件创建。我想一直执行最后几个任务(假设 6)。
我使用的是固定线程池。但我面临的问题是,它在内部使用阻塞队列。如果有新任务进入,我想将任务从阻塞队列中取出,而不是将它们推送给执行程序。我怎样才能做到这一点?是否有解决此问题的不同方法?
为了做你想做的事,你可以使用ScheduledThreadPoolExecutor
。并设置标志 setRemoveOnCancelPolicy(true)
.
当您调用 submit
方法时,此执行器 returns 一个 Future
。这些期货有一个 cancel()
方法,您可以在新请求到来时调用该方法。如果您愿意,您甚至可以取消当前 运行 的任务。
还有另一种方法可以调用 ThreadPoolExecutor.getQueue().clear()
,但这并不安全!所以请不要尝试:)
我有几个任务正在由某个事件创建。我想一直执行最后几个任务(假设 6)。
我使用的是固定线程池。但我面临的问题是,它在内部使用阻塞队列。如果有新任务进入,我想将任务从阻塞队列中取出,而不是将它们推送给执行程序。我怎样才能做到这一点?是否有解决此问题的不同方法?
为了做你想做的事,你可以使用ScheduledThreadPoolExecutor
。并设置标志 setRemoveOnCancelPolicy(true)
.
当您调用 submit
方法时,此执行器 returns 一个 Future
。这些期货有一个 cancel()
方法,您可以在新请求到来时调用该方法。如果您愿意,您甚至可以取消当前 运行 的任务。
还有另一种方法可以调用 ThreadPoolExecutor.getQueue().clear()
,但这并不安全!所以请不要尝试:)