使用线程池查询10万条数据 并放在一个list集合里面
时间: 2024-02-24 14:00:22 浏览: 157
好的,以下是使用线程池查询10万条数据并放在一个list集合里面的示例代码,代码中使用了Java 8的CompletableFuture和ExecutorService来实现线程池。
```java
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Main {
public static void main(String[] args) {
int total = 100000;
int threadCount = 10;
ExecutorService executor = Executors.newFixedThreadPool(threadCount);
List<CompletableFuture<List<String>>> futures = new ArrayList<>();
for (int i = 0; i < threadCount; i++) {
int start = i * (total / threadCount);
int end = (i + 1) * (total / threadCount);
CompletableFuture<List<String>> future = CompletableFuture.supplyAsync(() -> {
List<String> result = new ArrayList<>();
for (int j = start; j < end; j++) {
result.add(queryData(j));
}
return result;
}, executor);
futures.add(future);
}
List<String> resultList = new ArrayList<>();
for (CompletableFuture<List<String>> future : futures) {
resultList.addAll(future.join());
}
System.out.println(resultList.size());
executor.shutdown();
}
private static String queryData(int i) {
// 模拟查询数据的耗时操作
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "data" + i;
}
}
```
上述代码中,首先创建一个固定线程数的线程池,然后将查询数据的任务分成10个子任务,每个子任务查询10000条数据。每个子任务使用CompletableFuture异步执行,并提交到线程池中执行。最后使用join方法等待所有子任务完成,并将结果合并到一个List集合中。最后输出结果集合的大小,关闭线程池。
阅读全文