如何从for循环中的Java发送POST请求

时间:2018-01-02 07:44:21

标签: java json multithreading rest parallel-processing

我有一个循环,它向URL发送POST请求。 对于列表中的每个客户端ID,我必须提出请求。 但这是按顺序完成的。 什么是获得并行和更快的请求的最佳方式。

我可以选择在数组中发送请求作为JSON,但它给了我不合需要的输出。

    for (int i = 0; i < Clients.clients.size(); i++){
         String itemIdHistory = URLResponseGetPost.postRequest(Resources.COMPANY_ZABBIX_URL, itemIdJsonResponse);
    }

1 个答案:

答案 0 :(得分:3)

您应该查看ExecutorServicehttps://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-