📌 问题描述
每日闭店后需批量计算数千家门店的销售额。如何用线程池并行处理门店数据汇总,并防止内存溢出?
✅ 回答要点
我会使用固定大小的线程池(如Executors.newFixedThreadPool(CPU核心数*2)),将门店ID分成若干批次,每个线程处理一批门店。为防止内存溢出,避免一次性将所有原始数据加载到内存,而是采用流式查询或分页加载数据库中的订单数据,在内存中边读边累加。同时使用Future或CompletableFuture收集结果,最后汇总。线程池的队列选择有界队列(如LinkedBlockingQueue),并设置拒绝策略为CallerRunsPolicy,控制任务提交速率。
🔗 相关知识
- Java线程池与内存管理 - 线程池配置与内存优化
- 锁机制实现详解 - 线程同步机制
- CAS-Compare-And-Swap - 原子操作原理