gpt4 book ai didi

java - 如何在 Java 中使用 ThreadPoolExecutor 处理 RejectedExecutionException

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:18:42 25 4
gpt4 key购买 nike

在 Java 中使用 ThreadPoolExecutor 时,处理 RejectedExecutionException 的最佳方法是什么?

我想确保提交的任务不应该被忽视并且应该被执行。截至目前,完成任务没有硬性实时要求。

我认为可以做的一件事是在一个循环中等待,直到我知道可运行队列中有空间,然后继续并将其添加到队列中。

如果人们可以分享他们的经验,我们会很高兴。

添加我想到的可能的解决方案:

while(executor.getQueue().remainingCapacity <= 0){
// keep looping
Thread.sleep(100);
};
//if the loop exits ,indicates that we have space in the queue hence
//go ahead and add to the queue
executor.execute(new ThreadInstance(params));

最佳答案

我会改变你队列的行为。例如

public class MyBlockingQueue<E> extends ArrayBlockingQueue<E> {
private final long timeoutMS;

public MyBlockingQueue(int capacity, long timeoutMS) {
super(capacity);
this.timeoutMS = timeoutMS;
}

@Override
public boolean offer(E e) {
try {
return super.offer(e, timeoutMS, TimeUnit.MILLISECONDS);
} catch (InterruptedException e1) {
Thread.currentThread().interrupt();
return false;
}
}
}

这将在放弃之前等待队列耗尽。

关于java - 如何在 Java 中使用 ThreadPoolExecutor 处理 RejectedExecutionException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9413128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com