executorservice callable future 实现的分组并发接口速度奇慢

南猿北辙 2017-02-28 04:23:01
用 executorservice callable future 方式实现的并发接口 对数据进行分组处理
然而此并发接口的效率太差,甚至比我之前写的单线程方法还慢很多,而且CPU的占用率太高。
以下是我的方法代码,请各位大哥大姐,小弟小妹多多指教,以下是方法代码:
public ListNewInsuranceCostDetailResp queryCostDetailInfo(ListNewInsuranceCostDetailReq req) {
ListNewInsuranceCostDetailResp resp = new ListNewInsuranceCostDetailResp();
// 创建线程池
ExecutorService executor = Executors.newCachedThreadPool();
// 创建Callable对象任务
long allRows = newInsuranceCostRepository.count(req);
long remainderRow = allRows % THREAD_LIMIT;
long size = (allRows - remainderRow) / THREAD_LIMIT;
List<NewInsuranceCallable> tasks = new ArrayList<NewInsuranceCallable>();
for (int i = 0; i < THREAD_LIMIT; i++) {
// 创建任务
NewInsuranceCallable task = new NewInsuranceCallable();
req.getPubData().getPages().setStartRowno(size * i);
req.getPubData().getPages().setLastRowno(size * (i + 1));
if (i != 0 && i == THREAD_LIMIT - 1) {
req.getPubData().getPages().setLastRowno(size * (i + 1) + remainderRow);
}
task.setReq(req);
task.setNewInsuranceCostRepository(newInsuranceCostRepository);
tasks.add(task);
}
List<NewInsuranceCostDetailDisplayVo> result = new ArrayList<NewInsuranceCostDetailDisplayVo>();
CompletionService<List<NewInsuranceCostDetailDisplayVo>> ecs = new ExecutorCompletionService<List<NewInsuranceCostDetailDisplayVo>>(executor);
for (NewInsuranceRepositoryImpl t : tasks) {
ecs.submit(t);
}
executor.shutdown();
int n = tasks.size();
for (int i = 0; i < n; ++i) {
try {
List<NewInsuranceCostDetailDisplayVo> r = ecs.take().get();
if (r != null) {
result.addAll(r);
}
} catch (InterruptedException e) {
logger.error("查询中断");
} catch (ExecutionException e) {
logger.error("查询出错");
}
}
req.getPubData().getPages().setCountrows(result.size());
Pages pages = req.getPubData().getPages();
resp.setPages(pages);
resp.setData(result);
return resp;
}

...全文
157 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

679

社区成员

发帖
与我相关
我的任务
社区描述
智能路由器通常具有独立的操作系统,包括OpenWRT、eCos、VxWorks等,可以由用户自行安装各种应用,实现网络和设备的智能化管理。
linuxpython 技术论坛(原bbs)
社区管理员
  • 智能路由器社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧