有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

多线程Java线程池阻塞队列,始终执行最后几个

我有几个任务是由某个事件创建的。我想一直执行最后几项任务(假设6)

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


共 (1) 个答案

  1. # 1 楼答案

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

    当您调用submit方法时,该执行器返回一个Future。这些未来有一个cancel()方法,当新请求进入时可以调用该方法。如果愿意,您甚至可以取消当前正在运行的任务

    还有另一种方法可以调用ThreadPoolExecutor.getQueue().clear(),但这并不安全!所以请不要尝试:)