_logger.info("data size : "+saleData.size);
saleData.parallelStream().forEach(data -> {
SaleAggrData saleAggrData = new SaleAggrData() {
{
setCatId(data.getCatId());
setRevenue(RoundUpUtil.roundUpDouble(data.getRevenue()));
setMargin(RoundUpUtil.roundUpDouble(data.getMargin()));
setUnits(data.getUnits());
setMarginRate(ComputeUtil.marginRate(data.getRevenue(), data.getMargin()));
setOtd(ComputeUtil.OTD(data.getRevenue(), data.getUnits()));
setSaleDate(data.getSaleDate());
setDiscountDepth(ComputeUtil.discountDepth(data.getRegularPrice(), data.getRevenue()));
setTransactions(data.getTransactions());
setUpt(ComputeUtil.UPT(data.getUnits(), data.getTransactions()));
}
};
salesAggrData.addSaleAggrData(saleAggrData);
});
代码的问题在于从数据库获取响应时,使用并行流进行迭代时,数据大小每次都不同,而使用串行流时却运行良好。但我不能使用串行流,因为数据量巨大,需要花费很长时间。任何线索都将非常有帮助。
SaleAggrData
类的匿名子类,这是不必要的。这将会对性能产生影响,因为在运行时必须加载额外的类。最好使用SaleAggrData sad = new SaleAggrData(); sad.setCatId(...); sad.setRevenue(...); ...
。在此处查看性能影响测量结果。 - MC EmperorsalesAggrData
是一个线程安全的集合吗? - Jean-Baptiste Yunès