【发布时间】:2018-07-31 16:44:08
【问题描述】:
_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);
});
代码的问题是,当我从 DB 获得响应时,并且在使用并行流进行迭代时,数据大小每次都不同,而在使用顺序流时它工作正常。
我不能使用连续的Stream,因为数据量很大并且需要时间。
任何线索都会有所帮助。
【问题讨论】:
-
请注意——您使用的是
SaleAggrData类的匿名子类,这是不必要的。这将对性能产生影响,因为必须在运行时加载一个额外的类。你最好使用SaleAggrData sad = new SaleAggrData(); sad.setCatId(...); sad.setRevenue(...); ...。 See performance impact measurements here. -
但是在流执行之前记录了数据大小......你在做什么?
-
salesAggrData是线程安全集合吗?
标签: java parallel-processing java-8 parallel.foreach