Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中调用的并行化_Java_Parallel Processing - Fatal编程技术网

java中调用的并行化

java中调用的并行化,java,parallel-processing,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.t

我有以下代码:

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();
            }
        }
List allObjects=(List)objArepository.findAll();
for(ObjectA objA:allObjects){
字符串位置=objA.getUrl();
Client Client=utils.createClient();
WebTarget WebTarget=client.target(location.path(“/testUrl/”+someString”);
Invocation.Builder requestBuilder=webTarget.request();
反应;
试一试{
response=request.invoke();
}
}
与串行发送这些调用的for循环不同,我希望并行发送这些调用,问题是我没有找到任何示例,我不知道如何在java中使用

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 executor=getExecutorService();
List requests=getRequests();
List tasks=requests.stream()
.map(r->新处理器(r))
.collect(Collectors.toList());
执行人。调用所有(任务);
如果需要异步调用,请使用
executorService.submit
executorService.execute

使现代化 根据评论,我对上面的代码多加了几句话

getExecutorServices()
返回在其他位置创建的executorService,可能是一个单例,因为创建executorService非常昂贵

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

executorService.invokeAll
接受一个请求列表,因此必须将请求封装在可调用项中<代码>处理器是一个可调用的处理器,用于处理
请求


实际上,我认为代码非常具有描述性,普通Java程序员都能理解。

只是一个建议——ApacheSpark是一个用于并行计算的伟大开源工具。这是值得你花时间研究的,但这取决于你。多线程将是这里的简单答案。但这取决于请求的数量,如果没有限制,则应使用池线程来限制请求的数量,否则会使接收请求的服务器过载。请注意,我更喜欢回调方法而不是多线程系统,但这需要更多的工作您的答案很难理解,因为它引用了未知代码。
getExecutorService()
如何获得ExecutorService?什么是
请求
,什么是
getRequests()
?什么是
处理器
?我明天会尝试一下,当它工作时,我会给你正确的答案:)谢谢你的帮助