如果你想在多个线程中查询数据,并将每个线程查询到的数据进行汇总,你可以使用线程安全的数据结构,例如 ConcurrentHashMap
,来在每个线程中存储查询结果,并在汇总时进行合并。
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class MultiThreadDataSummarization {
// 使用线程安全的 ConcurrentHashMap 来存储查询结果
private static ConcurrentHashMap<String, Integer> resultMap = new ConcurrentHashMap<>();
// 线程池大小
private static final int THREAD_POOL_SIZE = 5;
public static void main(String[] args) {
// 创建线程池
ExecutorService executor = Executors.newFixedThreadPool(THREAD_POOL_SIZE);
// 提交查询任务给线程池执行
for (int i = 0; i < THREAD_POOL_SIZE; i++) {
executor.submit(new QueryTask());
}
// 关闭线程池
executor.shutdown();
// 等待所有任务执行完成
while (!executor.isTerminated()) {
// 等待所有任务结束
}
// 汇总结果
int totalSum = 0;
for (Integer value : resultMap.values()) {
totalSum += value;
}
// 打印汇总结果
System.out.println("Total Sum: " + totalSum);
}
// 查询任务类
static class QueryTask implements Runnable {
@Override
public void run() {
// 模拟查询数据库并返回结果
int queryResult = queryFromDatabase();
// 将查询结果存入 ConcurrentHashMap 中
resultMap.put(Thread.currentThread().getName(), queryResult);
}
// 模拟查询数据库的方法
private int queryFromDatabase() {
// 这里可以执行数据库查询操作,然后返回结果
// 暂时用随机数模拟查询结果
return (int) (Math.random() * 100);
}
}
}
如果查询返回的是一个列表(List),你可以使用线程安全的数据结构,比如 ConcurrentLinkedQueue
或者 CopyOnWriteArrayList
来存储每个线程查询到的列表,然后在汇总时进行合并。
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class MultiThreadListSummarization {
// 使用线程安全的 ConcurrentLinkedQueue 来存储查询结果列表
private static ConcurrentLinkedQueue<List<Integer>> resultList = new ConcurrentLinkedQueue<>();
// 线程池大小
private static final int THREAD_POOL_SIZE = 5;
public static void main(String[] args) {
// 创建线程池
ExecutorService executor = Executors.newFixedThreadPool(THREAD_POOL_SIZE);
// 提交查询任务给线程池执行
for (int i = 0; i < THREAD_POOL_SIZE; i++) {
executor.submit(new QueryTask());
}
// 关闭线程池
executor.shutdown();
// 等待所有任务执行完成
while (!executor.isTerminated()) {
// 等待所有任务结束
}
// 汇总结果
List<Integer> mergedList = new ArrayList<>();
for (List<Integer> list : resultList) {
mergedList.addAll(list);
}
// 打印汇总结果
System.out.println("Merged List: " + mergedList);
}
// 查询任务类
static class QueryTask implements Runnable {
@Override
public void run() {
// 模拟查询数据库并返回结果列表
List<Integer> queryResult = queryFromDatabase();
// 将查询结果存入 ConcurrentLinkedQueue 中
resultList.offer(queryResult);
}
// 模拟查询数据库的方法
private List<Integer> queryFromDatabase() {
// 这里可以执行数据库查询操作,然后返回结果列表
// 暂时用随机数模拟查询结果
List<Integer> result = new ArrayList<>();
for (int i = 0; i < 5; i++) {
result.add((int) (Math.random() * 100));
}
return result;
}
}
}