gpt4 book ai didi

java - 线程限制超出替换阻塞的工作线程

转载 作者:可可西里 更新时间:2023-11-01 17:05:45 25 4
gpt4 key购买 nike

我正在使用 AsyncHttpClient ,并并行发出许多 http 请求。我收到以下错误:

java.util.concurrent.RejectedExecutionException: Thread limit exceeded replacing blocked worker

如何让新请求等待直到有空闲线程?

我的代码:

public class MyClass {
private AsyncHttpClient asyncHttpClient = new DefaultAsyncHttpClient();

public JSONObject jsonFromUrl(String requestUrl) {
CompletableFuture<Response> futureResponse = asyncHttpClient.prepareGet(requestUrl).
addHeader("header-name", "header-value").execute().toCompletableFuture();
try {
Response response = futureResponse.get();
... handling response
} catch (Exception e) {
... handling exception
}
}
}

最佳答案

您可以为处理被拒绝任务的线程池实现并设置一个RejectedExecutionHandler,将它们添加到执行器的工作队列中。

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/RejectedExecutionHandler.html

threadPoolExecutor.setRejectedExecutionHandler(new RejectedExecutionHandler() {
@Override
public void rejectedExecution(Runnable task, ThreadPoolExecutor executor) {
try {
executor.getQueue().put(task);
} catch (InterruptedException e) {
// handle exception
}
}
});

请注意,在上面的实现中,put() 是一个阻塞操作,这意味着如果队列已满,它会等待直到有空间再次插入任务。

关于java - 线程限制超出替换阻塞的工作线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44431956/

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