gpt4 book ai didi

java - ThreadPoolExecutor, future : correlating requests and responses

转载 作者:行者123 更新时间:2023-11-30 07:59:11 24 4
gpt4 key购买 nike

我正在尝试使用 ThreadPoolExecutor连同 Future (结果)和 Callable (要执行的任务),但我想不出一种将输入(可调用)与相应结果( future )相关联的简单方法,似乎唯一明智的方法是创建一个包含的包装器( example )所有项目,但这对于这样一个简单的任务来说可能开销太大。

我错了吗?有任何建议的替代方案吗?

最佳答案

更好的方法是使用 invokeAll() 方法而不是 submit()。您需要向它提供一组 Callable,它会按照与您的任务相同的顺序返回一组 Futures。此外,invokeAll() 允许您定义超时,因此您不需要锁存器。它将是这样的:

List<Callable> jobs = new ArrayList<>(requests.size());
for (String request : requests) {
jobs.add(new MyCallable(request));
}
List<Future<ProcessedResponse>> futures = executor.invokeAll(jobs, timeout, TimeUnit.MILLISECONDS);
Iterator<String> it = requests.iterator();
for (Future<ProcessedResponse> future: futures) {
String request = it.next(); // This request corresponds to this future
if (future.isDone()) {
results.add(new Result(request, future.get()));
} else {
future.cancel(true);
}
}

关于java - ThreadPoolExecutor, future : correlating requests and responses,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39603265/

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