java利用Future实现多线程执行与结果聚合的代码怎么写
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,java利用Future实现多线程执行与结果聚合的代码怎么写,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。场景网站智能问答场景,需要
千家信息网最后更新 2025年11月08日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安全错误
数据库的锁怎样保障安全
南宁市互联网科技公司
网络安全管理服务行业
都江堰住宿软件开发
打印服务器连续打印同一份文件
常熟品牌网络技术优势
为什么表格不能删除数据库
数据库网络存储技术
服务器配置与管理课有什么用
网络安全困扰事件
瓦拉斯塔兹服务器
网络安全类型不正确怎么解决
国家网络安全局招人吗
直播采集服务器
计算机网络技术教材知乎
女生做软件开发一点也不开心
中国近代报刊电子数据库
蓝裔科技互联网
网络安全的报报画
机房网络安全教程
网络安全自查与整改措施
学好数据库多久
北京web前端软件开发要多少钱
网易实况足球球员数据库
为什么表格不能删除数据库
网络安全监控服务
c 实时数据库
华为服务器维修维保多少钱
和平精英在后台无法连接到服务器
联想机架服务器658参数
美国网络安全体系架构简介