我有一个循环,它向URL发送POST请求。 对于列表中的每个客户端ID,我必须提出请求。 但这是按顺序完成的。 什么是获得并行和更快的请求的最佳方式。
我可以选择在数组中发送请求作为JSON,但它给了我不合需要的输出。
for (int i = 0; i < Clients.clients.size(); i++){
String itemIdHistory = URLResponseGetPost.postRequest(Resources.COMPANY_ZABBIX_URL, itemIdJsonResponse);
}
答案 0 :(得分:3)
您应该查看ExecutorService
:https://docs.oracle.com/javase/9/docs/api/java/util/concurrent/ExecutorService.html
以下是一个例子:
ExecutorService executorService = Executors.newSingleThreadExecutor();
Set<Callable<String>> callables = new HashSet<Callable<String>>();
callables.add(new Callable<String>() {
public String call() throws Exception {
return "Task 1";
}
});
callables.add(new Callable<String>() {
public String call() throws Exception {
return "Task 2";
}
});
callables.add(new Callable<String>() {
public String call() throws Exception {
return "Task 3";
}
});
List<Future<String>> futures = executorService.invokeAll(callables);
for(Future<String> future : futures){
System.out.println("future.get = " + future.get());
}
executorService.shutdown();
要并行运行,请考虑使用包含更多线程的线程池:https://docs.oracle.com/javase/9/docs/api/java/util/concurrent/Executors.html#newFixedThreadPool-int-