引言
1.一般首页请求接口查询,加载比较多可以采用线程池submit 实现并行运行
spring 控制层代码
public ModelAndView index(HttpServletRequest request, HttpServletResponse response) throws Exception { long begin = System.currentTimeMillis(); ExecutorService serviceTaskPool = ExecutorPools.getInstance().serviceTaskPool; #第一个线程处理逻辑任务 Future> a_future = serviceTaskPool.submit(new Callable >() { @Override public HashMap call() throws Exception { //TODO 业务逻辑 return recommandMap; } }); #第二个线程处理逻辑任务 Future > b_future = serviceTaskPool.submit(new Callable >() { @Override public HashMap 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