是否有一个ExecutorService实现具有队列限制,并且有一个选项可以用新的替换旧的队列成员?

时间:2018-08-31 06:40:12

标签: java multithreading runnable executorservice blockingqueue

我需要一个ExecutorService实现,该实现可以限制可以排队的Runnable数量。我还希望能够控制队列已满时提交新的可运行对象时发生的情况。理想情况下,我希望能够选择一种策略,但只需将可运行对象移到队列的最前面,然后将新策略放在队列的末尾即可。我确定肯定已经有类似的东西实现了,我环顾四周但找不到任何东西。

1 个答案:

答案 0 :(得分:2)

使用DiscardOldestPolicy

  

用于拒绝任务的处理程序,它丢弃最早的未处理程序   请求,然后重试执行,除非执行器被关闭,否则   在这种情况下,任务将被丢弃。

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;