为了实现 Java 模拟性能测试同时发起 71 个并发请求,并且每个请求的响应需要三分钟才能返回,并将每个请求的响应信息打印出来并返回响应的报文,你可以使用 Java 的线程池来管理并发请求,使用 ExecutorService
和 Future
来控制每个请求的执行和等待响应,使用 Callable
来包装每个请求的逻辑。
以下是一个示例代码:
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;
public class ConcurrentRequests {
public static void main(String[] args) throws InterruptedException, ExecutionException {
int concurrentCount = 71; // 并发请求数
ExecutorService executorService = Executors.newFixedThreadPool(concurrentCount);
List<Future<String>> futures = new ArrayList<>();
// 发起并发请求
for (int i = 0; i < concurrentCount; i++) {
Callable<String> task = new RequestTask();
Future<String> future = executorService.submit(task);
futures.add(future);
}
// 等待所有请求完成并获取响应
for (Future<String> future : futures) {
String response = future.get(); // 获取响应,会阻塞直到响应返回
System.out.println("Response: " + response);
}
executorService.shutdown(); // 关闭线程池
}
static class RequestTask implements Callable<String> {
@Override
public String call() throws Exception {
// 模拟请求逻辑
Thread.sleep(180_000); // 请求响应时间为三分钟
return "Response for request: " + Thread.currentThread().getName();
}
}
}
在这个示例中,我们使用了 ExecutorService
创建了一个固定大小的线程池来管理并发请求。然后,我们创建了 RequestTask
类来包装每个请求的逻辑,并实现了 Callable
接口。在 call()
方法中,我们模拟了每个请求的逻辑,并返回了响应信息。最后,我们使用 Future
来获取每个请求的响应,future.get()
方法会阻塞直到响应返回。