多线程Java线程池阻塞队列,始终执行最后几个
我有几个任务是由某个事件创建的。我想一直执行最后几项任务(假设6)
我使用的是固定线程池。但我面临的问题是,它在内部使用阻塞队列。如果有新任务进入,我想让任务从阻塞队列中出列,而不把它们推给执行者。我怎样才能做到这一点?这个问题有不同的解决方法吗
你可以在下面搜索框中键入要查询的问题!
我有几个任务是由某个事件创建的。我想一直执行最后几项任务(假设6)
我使用的是固定线程池。但我面临的问题是,它在内部使用阻塞队列。如果有新任务进入,我想让任务从阻塞队列中出列,而不把它们推给执行者。我怎样才能做到这一点?这个问题有不同的解决方法吗
# 1 楼答案
为了做你想做的事,你可以使用
ScheduledThreadPoolExecutor
。并设置标志setRemoveOnCancelPolicy(true)
当您调用
submit
方法时,该执行器返回一个Future
。这些未来有一个cancel()
方法,当新请求进入时可以调用该方法。如果愿意,您甚至可以取消当前正在运行的任务还有另一种方法可以调用
ThreadPoolExecutor.getQueue().clear()
,但这并不安全!所以请不要尝试:)