📌 问题描述

每日闭店后需批量计算数千家门店的销售额。如何用线程池并行处理门店数据汇总,并防止内存溢出?

✅ 回答要点

我会使用固定大小的线程池(如Executors.newFixedThreadPool(CPU核心数*2)),将门店ID分成若干批次,每个线程处理一批门店。为防止内存溢出,避免一次性将所有原始数据加载到内存,而是采用流式查询或分页加载数据库中的订单数据,在内存中边读边累加。同时使用FutureCompletableFuture收集结果,最后汇总。线程池的队列选择有界队列(如LinkedBlockingQueue),并设置拒绝策略为CallerRunsPolicy,控制任务提交速率。

🔗 相关知识

💡 记忆技巧

📚 参考资料