简洁写
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
public class Test1 {
public static void main(String[] args) {
List<String> dataList = Arrays.asList("A", "B", "C", "D");
// 并行处理每个元素
List<CompletableFuture<Void>> futures = dataList.stream()
.map(data -> CompletableFuture.runAsync(() -> processElement(data)))
.collect(Collectors.toList());
// 等待所有任务完成
CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join();
}
private static void processElement(String data) {
System.out.println(Thread.currentThread().getName() + " 处理: " + data);
}
}
或者
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;
public class MultiThreadSingleElement {
public static void main(String[] args) {
List<String> dataList = new ArrayList<>();
for (int i = 0; i < 1000; i++) {
dataList.add("Data-" + i);
}
// 创建线程池(根据任务类型调整参数)
ExecutorService executor = new ThreadPoolExecutor(
4, // 核心线程数
8, // 最大线程数
60L, TimeUnit.SECONDS,
new LinkedBlockingQueue<>(1000), // 有界队列防止OOM
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.CallerRunsPolicy() // 队列满时由主线程处理
);
// 提交所有任务
for (String data : dataList) {
executor.submit(() -> processElement(data));
}
// 关闭线程池并等待任务完成
executor.shutdown();
try {
if (!executor.awaitTermination(1, TimeUnit.HOURS)) {
System.err.println("线程池未在指定时间内终止");
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private static void processElement(String data) {
// 模拟处理逻辑(如网络请求、复杂计算等)
System.out.println(Thread.currentThread().getName() + " 处理: " + data);
}
}