java创建20个线程同时获取某一个接口数据,并将数据整合到一个list中,最简洁
时间: 2024-11-04 18:14:30 浏览: 16
在Java中,为了创建20个线程同时从某个接口获取数据并将结果存储在一个列表中,你可以使用`ExecutorService`、`Callable`和`Future`来实现,因为`Future`允许我们处理异步计算的结果并将其收集到一个集合中。下面是一个简单的示例:
```java
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;
public class DataFetcher implements Callable<List<Data>> {
private final int index;
public DataFetcher(int index) {
this.index = index;
}
// 假设getDataFromInterface返回Data对象
@Override
public List<Data> call() {
return Collections.singletonList(getDataFromInterface(index));
}
// 模拟从接口获取数据的函数
private Data getDataFromInterface(int index) {
// ... 实现具体的接口调用逻辑
return new Data(index);
}
public static void main(String[] args) throws InterruptedException, ExecutionException {
ExecutorService executor = Executors.newFixedThreadPool(20); // 创建固定大小的线程池
List<Future<List<Data>>> futures = new ArrayList<>();
for (int i = 0; i < 20; i++) {
futures.add(executor.submit(new DataFetcher(i)));
}
List<Data> dataList = new ArrayList<>();
for (Future<List<Data>> future : futures) {
dataList.addAll(future.get()); // 等待每个任务完成并添加数据
}
executor.shutdown(); // 关闭线程池
System.out.println("All data fetched: " + dataList);
阅读全文