import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class CompletableFutureExample {
public static void main(String[] args) {
// 创建1000条数据
List<Integer> dataList = new ArrayList<>();
for (int i = 1; i <= 1000; i++) {
dataList.add(i);
}
// 每次处理50条数据
int batchSize = 50;
int totalThreads = 10;
List<CompletableFuture<Void>> futures = new ArrayList<>();
// 分批处理数据
for (int i = 0; i < dataList.size(); i += batchSize) {
List<Integer> batchData = dataList.subList(i, Math.min(i + batchSize, dataList.size()));
// 创建CompletableFuture处理每一批数据
CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
for (Integer data : batchData) {
// 处理逻辑
process(data);
}
});
futures.add(future);
}
// 等待所有CompletableFuture执行结束
CompletableFuture<Void> allFutures = CompletableFuture.allOf(futures.toArray(new CompletableFuture[0]));
try {
allFutures.get(); // 阻塞等待所有CompletableFuture执行完毕
System.out.println("数据处理完成!");
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
private static void process(Integer data) {
// 处理数据的具体逻辑
System.out.println("正在处理数据:" + data);
// 在这里添加你的数据处理代码
}
}
1000条数据开10个线程处理,每次处理50条CompletableFuture 实现
最新推荐文章于 2024-05-23 10:54:59 发布