java 多线程调用http测试代码
时间: 2023-09-19 09:09:15 浏览: 43
以下是一个Java多线程调用HTTP的测试代码示例,使用了HttpClient库:
```java
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.junit.Test;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class MultiThreadHttpTest {
private static final int THREAD_POOL_SIZE = 10;
private static final String URL = "https://www.example.com";
@Test
public void testMultiThreadHttpCall() throws InterruptedException {
ExecutorService executorService = Executors.newFixedThreadPool(THREAD_POOL_SIZE);
List<Runnable> tasks = new ArrayList<>();
for (int i = 0; i < THREAD_POOL_SIZE; i++) {
tasks.add(new HttpTask());
}
executorService.invokeAll(tasks);
executorService.shutdown();
}
private static class HttpTask implements Runnable {
private final CloseableHttpClient httpClient;
public HttpTask() {
this.httpClient = HttpClients.createDefault();
}
@Override
public void run() {
HttpGet httpGet = new HttpGet(URL);
try (CloseableHttpResponse response = httpClient.execute(httpGet)) {
HttpEntity entity = response.getEntity();
if (entity != null) {
String result = EntityUtils.toString(entity);
System.out.println("Thread " + Thread.currentThread().getName() + " got result: " + result);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
```
在上面的示例中,我们使用了一个固定大小的线程池来执行多个HTTP调用任务。每个任务都是一个HTTP GET请求,使用 Apache HttpClient 库实现。在 `HttpTask` 类中,我们创建了一个 `CloseableHttpClient` 对象并执行 HTTP GET 请求。请求完成后,我们从响应实体中提取内容并将结果打印到控制台。
使用这个测试代码可以测试多线程并发调用 HTTP 服务的情况,注意要根据实际情况修改 URL 和线程池大小。