引言
1.一般首页请求接口查询,加载比较多可以采用线程池submit 实现并行运行
spring 控制层代码
public ModelAndView index(HttpServletRequest request, HttpServletResponse response) throws Exception {
long begin = System.currentTimeMillis();
ExecutorService serviceTaskPool = ExecutorPools.getInstance().serviceTaskPool;
#第一个线程处理逻辑任务
Future<HashMap<String, RecommandResult>> a_future = serviceTaskPool.submit(new Callable<HashMap<String, RecommandResult>>() {
@Override
public HashMap<String, RecommandResult> call() throws Exception {
//TODO 业务逻辑
return recommandMap;
}
});
#第二个线程处理逻辑任务
Future<HashMap<String, Object>> b_future = serviceTaskPool.submit(new Callable<HashMap<String, Object>>() {
@Override
public HashMap<String, Object> call() throws Exception {
//TODO 业务逻辑
return map;
}
});
ModelAndView mv=new ModelAndView();
#调用get()方法进行休眠获取上面两个线程处理返回的结果
mv.addAllObjects(a_future.get());
mv.addAllObjects(b_future.get());
mv.setViewName("/index");
long end = System.currentTimeMillis();
logger.info("visit index,spend:{} ms",(end-begin));
return mv;
}
单例线程池
public final class ExecutorPools {
private static final Logger logger = LoggerFactory.getLogger(ExecutorPools.class);
public final ExecutorService mqSubmitter= Executors.newFixedThreadPool(40);
public final ExecutorService serviceTaskPool = Executors.newFixedThreadPool(100);
}
```bin