我需要一个ExecutorService实现,该实现可以限制可以排队的Runnable数量。我还希望能够控制队列已满时提交新的可运行对象时发生的情况。理想情况下,我希望能够选择一种策略,但只需将可运行对象移到队列的最前面,然后将新策略放在队列的末尾即可。我确定肯定已经有类似的东西实现了,我环顾四周但找不到任何东西。
答案 0 :(得分:2)
用于拒绝任务的处理程序,它丢弃最早的未处理程序 请求,然后重试执行,除非执行器被关闭,否则 在这种情况下,任务将被丢弃。
和BlockingQueue
,具有固定容量:
int fixedThreadNumber = 10;
int idleSeconds = 10;
BlockingQueue<Runnable> blockingQueue = new LinkedBlockingQueue<>(10);
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
fixedThreadNumber,
fixedThreadNumber,
idleSeconds, TimeUnit.SECONDS,
blockingQueue, new ThreadPoolExecutor.DiscardOldestPolicy());
ExecutorService executor = threadPoolExecutor;