for (UserBookRankInfo userBookRankInfo : userBookRankInfos) {
for (DdbResourceBook ddbResourceBook : ddbResourceBooks) {
if (userBookRankInfo.getFkBookId().equals(ddbResourceBook.getId())) {
userBookRankInfo.setName(ddbResourceBook.getName());
break;
}
}
// 使用futue并发请求数据库,因表数据料大,耗时间分成单条查询获取数据
Future<UserBookRankInfo> future =Executors.newCachedThreadPool().submit(new Callable<UserBookRankInfo>() {
@Override
public UserBookRankInfo call() throws Exception {
String fkBookId = userBookRankInfo.getFkBookId();
UserBookRankInfo increasedAndActiveNum = ddbLearnLogBookTraceMapper
.getIncreasedAndActiveNum(province, city, startDate, endDate, fkBookId);
return increasedAndActiveNum;
}
});
futures.add(future);
}
....................主线程执行其他任务
// 获取相应结果,对相应的数据进行操作
for (Future<UserBookRankInfo> future : futures) {
try {
UserBookRankInfo bookRankInfo = future.get();
for (UserBookRankInfo userBookRankInfo : userBookRankInfos) {
if (bookRankInfo.getFkBookId().equals(userBookRankInfo.getFkBookId())) {
userBookRankInfo.setActiveNum(bookRankInfo.getActiveNum());
userBookRankInfo.setIncreasedNum(bookRankInfo.getIncreasedNum());
}
}
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
使用futue 和线程池并发mysql请求数据库(该方法涉及接口不常用,不会对数据库造成太大压力,加快接口相应速度)
最新推荐文章于 2024-03-20 13:56:32 发布