java利用Future实现多线程执行与结果聚合的代码怎么写
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,java利用Future实现多线程执行与结果聚合的代码怎么写,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。场景网站智能问答场景,需要
千家信息网最后更新 2026年11月01日java利用Future实现多线程执行与结果聚合的代码怎么写
java利用Future实现多线程执行与结果聚合的代码怎么写,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
场景
网站智能问答场景,需要对多个分类查询,结果聚合展示
由于每种分类都有自己的业务逻辑,有的需要查询数据库中间库,有的需要查询elasticsearch搜索引擎,有的需要调用第三方接口,数据查询要分开进行,没法一次查询搞定
实际上这几个查询不相关,可以同时进行,现在串行,使该场景下,智能问答返回较慢
解决
最简单的逻辑,肯定就是java多线程,将串行改为并行
这样查询返回时间,就取决于最慢的一个查询,返回时间大大缩短
页面返回一般要求三秒内,实际项目上我们要求1秒内返回,多线程解决了这个问题
下面上代码,部分截取
@Autowired private ThreadPoolTaskExecutor taskExecutor;
// 新闻查询 SolrPageQueryVO newsQueryVO = new SolrPageQueryVO(); BeanUtil.copyProperties(vo, newsQueryVO); newsQueryVO.setAllSite(vo.getAllSite()); newsQueryVO.setTypeCode(SolrPageQueryVO.TypeCode.articleNews.toString().concat(",") .concat(SolrPageQueryVO.TypeCode.pictureNews.toString()) .concat(",").concat(SolrPageQueryVO.TypeCode.videoNews.toString())); Future> newsFuture = taskExecutor.submit(()->selectForAsk(map, sumMap, newsQueryVO, "news", context)); //网上服务 Future> workGuideFuture = taskExecutor.submit(()->selectForAsk(map, sumMap, vo, "workGuide", context)); //留言 SolrPageQueryVO messageBoardQueryVO = new SolrPageQueryVO(); BeanUtil.copyProperties(vo, messageBoardQueryVO); messageBoardQueryVO.setAllSite(vo.getAllSite()); messageBoardQueryVO.setTypeCode(SolrPageQueryVO.TypeCode.messageBoard.toString()); Future> messageBoardFuture = taskExecutor.submit(()->selectForAsk(map, sumMap, messageBoardQueryVO, "messageBoard", context)); //信息公开(isAllSite为true时,搜索所有集合,不区分集合和站点,只根据dn搜索,有区分需要的项目可以重写SearchEsServiceImpl类) SolrPageQueryVO publicContentQueryVO = new SolrPageQueryVO(); BeanUtil.copyProperties(vo, publicContentQueryVO); publicContentQueryVO.setAllSite(vo.getAllSite()); publicContentQueryVO.setTypeCode(SolrPageQueryVO.TypeCode.public_content.toString()); Future> publicContentFuture = taskExecutor.submit(()->selectForAsk(map, sumMap, publicContentQueryVO, "public_content", context)); //问答知识库(isAllSite为true时,搜索所有集合,不区分集合和站点,有区分需要的项目可以重写或传false) SolrPageQueryVO knowledgeBaseQueryVO = new SolrPageQueryVO(); BeanUtil.copyProperties(vo, knowledgeBaseQueryVO); knowledgeBaseQueryVO.setAllSite(vo.getAllSite()); knowledgeBaseQueryVO.setTypeCode(SolrPageQueryVO.TypeCode.knowledgeBase.toString()); Future> knowledgeBaseFuture = taskExecutor.submit(()->selectForAsk(map, sumMap, knowledgeBaseQueryVO, "knowledgeBase", context)); try { knowledgeBaseFuture.get(); } catch (Exception e) { e.printStackTrace(); } try { messageBoardFuture.get(); } catch (Exception e) { e.printStackTrace(); } try { newsFuture.get(); } catch (Exception e) { e.printStackTrace(); } try { publicContentFuture.get(); } catch (Exception e) { e.printStackTrace(); } try { workGuideFuture.get(); } catch (Exception e) { e.printStackTrace(); } tabcount = sumMap.values().size(); map.put("tabcount", tabcount); map.put("numMap", sumMap);private void selectForAsk(Mapmap, Map sumMap, SolrPageQueryVO vo, String type, Context context) { if ("news".equals(type)) { try { // do something } catch (Exception e) { e.printStackTrace(); } } else if ("workGuide".equals(type)) { try { //网上办事查询调用接口 // do something } catch (Exception e) { e.printStackTrace(); } } else if ("messageBoard".equals(type)) { try { // do something } catch (Exception e) { e.printStackTrace(); } } else if ("public_content".equals(type)) { try { Long queryCount = SearchQueryHolder.queryCount(vo); // do something } catch (Exception e) { e.printStackTrace(); } } else if ("knowledgeBase".equals(type)) { try { // do something } catch (Exception e) { e.printStackTrace(); } } }
关于java利用Future实现多线程执行与结果聚合的代码怎么写问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。
查询
线程
问题
搜索
结果
项目
问答
代码
场景
实际
接口
数据
时间
智能
更多
知识
站点
逻辑
分类
帮助
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
南京欣网互联网络科技
广州为想互联网科技有限公司
上海睿民互联网科技有限公司
朗新科技与工业互联网
互联网科技的
互联网 科技创业
奇酷互联网科技公司
广州凡科互联网科技
互联网科技网站
深圳互联网科技怎么样
海南科技产业互联网平台
济南和联互联网科技有限公司
赶超互联网科技 微信多开
搜狐科技互联网
互联网金融科技展
互联网金融科技元年
小米互联网科技园入驻
互联网科技快讯热点
互联网科技接地气
福仕德教育科技互联网
科技金融是不是互联网金融
互联网科技深圳
新华互联网科技学院
奇士达互联网科技
互联网 新科技
富国互联网科技创新基金
剑昆互联网络科技有限公司临桂
栖莱科技互联网股份有限公司
互联网安防科技感
互联网科技对化妆品行业