java - 在java中并行调用

标签 java parallel-processing

我有以下代码:

List<ObjectA> allObjects = (List<ObjectA>) objArepository.findAll();

for (ObjectA objA : allObjects) {
        String location = objA.getUrl();

        Client client = utils.createClient();
        WebTarget webTarget = client.target(location).path("/testUrl/" + someString); 
        Invocation.Builder requestBuilder = webTarget.request();
        Response response;
        try {
            response = request.invoke();
            }
        }

我想并行发送这些调用,而不是串行发送这些调用的 for 循环,问题是我没有找到任何示例,而且我不知道如何在 java 中做到这一点

最佳答案

使用ExecutorService .

executorService.invokeAll 可以并行执行一系列任务并等待它们完成。

ExecutorService executor = getExecutorService();
List<Request> requests = getRequests();
List<Callable> tasks = requests.stream()
    .map(r -> new Processor(r))
    .collect(Collectors.toList());

executor.invokeAll(tasks);

如果需要异步调用,请使用executorService.submitexecutorService.execute

更新

根据评论,我对上面的代码再补充几句。

getExecutorServices() 返回一个在其他地方创建的 executorService,可能是一个单例,因为创建 executorService 的开销相当大。

getRequests() 返回请求列表,Request 可以是您想要处理的任何内容,例如问题中的 ObjectA

executorService.invokeAll 接受 Callable 的列表,所以你必须将你的请求封装在可调用对象中。 Processor 是一个用于处理Request 的可调用函数。

其实我觉得这段代码描述性很强,普通Java程序员都能看懂。

关于java - 在java中并行调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44654188/

相关文章:

java - Apache mod_proxy 和 Tomcat 出现 Bad Gateway 502 错误

java - android中json的解析

java - 如何从 Firestore 中的子集合中获取所有文档

c# - 模拟给出不同的结果与正常的 for 循环 Vs Parallel For

c# - 通过异步示例了解 C# 中的并行编程

c++ - 在并行 C++ 中建立内存

java - 解析 XML 时出错 : mismatched tag XOSP

java - 为什么前端传递的日期与后端(Java)中传递的日期不一样(以毫秒为单位)

matlab 分布式计算 sge(qsub)

java - MPJ Express eclipse - 删除字母组合