#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 потоков, anExecutors.newFixedThreadPool(5)
может быть хорошим выбором.