Как создавать асинхронные post-запросы в java

#java #post

#java #Публикация

Вопрос:

У меня есть список из 10 карт, у которых есть запросы на выполнение post-вызова. Мне нужно выполнить итерацию этих карт и отправить POST-запрос на java, используя параллелизм.

Я хочу, чтобы каждый поток выдавал два post-запроса одновременно параллельно, и я не хочу ждать ответа на них. Мне просто нужно выполнить эти 10 запросов параллельно, используя 5 потоков.

Моя проблема в том, что он не выполняет параллельные запросы. Он ожидает ответа и принимает один поток для каждого запроса. Я хотел бы принять два запроса для потока, которые одновременно обрабатывают запросы.

Мой код :

 for (int i = 0; i < finalList.size(); i  ) {
        String eachJsonReq = finalList.get(i);
        Runnable worker = new MyRunnable(api_url,eachJsonReq);
        executor.execute(worker);
    }
    executor.shutdown();

public static class MyRunnable implements Runnable {
        private final String url;
        private final String jsonInputData;

        MyRunnable(String url,String jsonInputData) {
            this.url = url;
            this.jsonInputData = jsonInputData;
        }

        public void run() {
            try {
                doPost(url,jsonInputData);
            } catch (Exception e) {
                e.printStackTrace();
            }
         }
      }

public static void doPost(String url, String data) throws Exception {
    URL urlObj = new URL(url);
    HttpURLConnection conn = (HttpURLConnection) urlObj.openConnection();
    conn.setDoOutput(true);
    conn.setRequestProperty("Content-Type", "application/json");
    conn.setRequestMethod("POST");

    DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
    wr.writeBytes(data);

    //OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
    //writer.write(data);
    System.out.println("Hitted url is " url " with data is " data);
    wr.flush();
    wr.close();
    conn.disconnect();
    }
  

Комментарии:

1. вы можете использовать CompleteFuture Java

2. не могли бы вы предложить или предоставить мне пример кода для выполнения post-запроса с использованием completefuture @BERGUIGAMohamedAmine

3. Вы забыли показать executor . Если вам нужно 5 потоков, an Executors.newFixedThreadPool(5) может быть хорошим выбором.