springboot 使用线程池进行大量网络请求代码示例
时间: 2023-04-04 11:02:41 浏览: 121
以下是一个使用线程池进行大量网络请求的 Spring Boot 代码示例:
```java
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.stream.Collectors;
@Service
public class NetworkService {
private final Executor executor = Executors.newFixedThreadPool(10);
@Async
public CompletableFuture<List<String>> fetchUrls(List<String> urls) {
List<CompletableFuture<String>> futures = urls.stream()
.map(url -> CompletableFuture.supplyAsync(() -> fetchUrl(url), executor))
.collect(Collectors.toList());
return CompletableFuture.allOf(futures.toArray(new CompletableFuture[0]))
.thenApply(v -> futures.stream()
.map(CompletableFuture::join)
.collect(Collectors.toList()));
}
private String fetchUrl(String url) {
// 发送网络请求并返回响应
return null;
}
}
```
这个示例使用了一个固定大小的线程池来处理大量的网络请求。`fetchUrls` 方法接收一个 URL 列表,然后使用 Java 8 的 Stream API 将每个 URL 转换成一个 `CompletableFuture` 对象,这个对象会在一个独立的线程中发送网络请求并返回响应。最后,`CompletableFuture.allOf` 方法会等待所有的 `CompletableFuture` 对象都完成,然后将它们的结果合并成一个列表返回。
阅读全文