多线程技术优化:Callable,FutureTask,Task.get()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | Map<String,BaseResultMessage> brmMap = new HashMap<>(); long beginTimeSum = System.currentTimeMillis(); for (StkInventoryWlTypeEnum emum:StkInventoryWlTypeEnum.values()){ long beginTime = System.currentTimeMillis(); Callable<BaseResultMessage> aCallable =()->{ if (OrgNumberEunm.FA_FJ.getOrgNumber().equals(stkInventoryWlDto.getOrg())) { return stkInventoryWlServicemap.get(emum.getCode()).getStkInventoryWlFq(stkInventoryWlDto); } else { return stkInventoryWlServicemap.get(emum.getCode()).getStkInventoryWlHn(stkInventoryWlDto); } }; FutureTask<BaseResultMessage> aCallableTask = new FutureTask(aCallable); new Thread(aCallableTask,emum.getName()+ "|线程|" +emum.getCode()).start(); brmMap.put(emum.getName()+ "[" +emum.getCode()+ "]" ,aCallableTask.get()); //花时在等待(解决方案:Map<String,FutureTask> callableTaskGetMap = new HashMap<>();,主线程走完后再取aCallableTask.get())long endTime = System.currentTimeMillis(); <br>logger.info("花时:"+emum.getName()+"["+emum.getCode()+"]"+((endTime-beginTime))+"ms"); <br>} <br>long endTimeSum = System.currentTimeMillis(); <br>logger.info("总合计-花时:"+((endTimeSum-beginTimeSum))+"ms");<br><br> |
1 | ==================================================== <br>花时:标准其他出库单-铝业[STK_MISDELIVERY]2727s <br>花时:采购入库单-铝业[STK_INSTOCK]1211s <br>花时:标准直接调拨单[STK_TRANSFERDIRECT]1224s <br>花时:即时库存[STK_INVENTORY]709s <br>总合计-花时:5872S <br>====================================================== <br>花时:标准其他出库单-铝业[STK_MISDELIVERY]2002ms <br>花时: 采购入库单-铝业[STK_INSTOCK]886ms <br>花时:标准直接调拨单[STK_TRANSFERDIRECT]771ms <br>花时: 即时库存[STK_INVENTORY]715ms <br>总合计-花时:4378ms 总合计-花时:4279ms |
1 2 3 4 | <em>==================================================== 加一个callableTaskGetMap用来存数据,FutureTask键值:减少等待时间aCallableTask.get() Map<String,FutureTask> callableTaskGetMap = new HashMap<>(); ====================================================</em> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | Map<String, Object> brmMap = new HashMap<>(); Map<String,FutureTask> callableTaskGetMap = new HashMap<>(); long beginTimeSum = System.currentTimeMillis(); for (StkInventoryWlTypeEnum emum:StkInventoryWlTypeEnum.values()){ long beginTime = System.currentTimeMillis(); Callable<BaseResultMessage> aCallable =()->{ if (OrgNumberEunm.FA_FJ.getOrgNumber().equals(stkInventoryWlDto.getOrg())) { return stkInventoryWlServicemap.get(emum.getCode()).getStkInventoryWlFq(stkInventoryWlDto); } else { return stkInventoryWlServicemap.get(emum.getCode()).getStkInventoryWlHn(stkInventoryWlDto); } }; FutureTask<BaseResultMessage> aCallableTask = new FutureTask(aCallable); new Thread(aCallableTask,emum.getName()+ "|线程|" +emum.getCode()).start(); callableTaskGetMap.put(emum.getCode(),aCallableTask); // long endTime = System.currentTimeMillis(); logger.info( "花时:" +emum.getName()+ "[" +emum.getCode()+ "]" +((endTime-beginTime))+ "ms" ); } brmMap.put(StkInventoryWlTypeEnum.STK_MISDELIVERY.getName()+ "[" +StkInventoryWlTypeEnum.STK_MISDELIVERY.getCode()+ "]" ,callableTaskGetMap.get(StkInventoryWlTypeEnum.STK_MISDELIVERY.getCode()).get()); brmMap.put(StkInventoryWlTypeEnum.STK_INSTOCK.getName()+ "[" +StkInventoryWlTypeEnum.STK_INSTOCK.getCode()+ "]" ,callableTaskGetMap.get(StkInventoryWlTypeEnum.STK_INSTOCK.getCode()).get()); brmMap.put(StkInventoryWlTypeEnum.STK_TRANSFERDIRECT.getName()+ "[" +StkInventoryWlTypeEnum.STK_TRANSFERDIRECT.getCode()+ "]" ,callableTaskGetMap.get(StkInventoryWlTypeEnum.STK_TRANSFERDIRECT.getCode()).get()); brmMap.put(StkInventoryWlTypeEnum.STK_INVENTORY.getName()+ "[" +StkInventoryWlTypeEnum.STK_INVENTORY.getCode()+ "]" ,callableTaskGetMap.get(StkInventoryWlTypeEnum.STK_INVENTORY.getCode()).get()); long endTimeSum = System.currentTimeMillis(); logger.info( "总合计-花时:" +((endTimeSum-beginTimeSum))+ "ms" ); |
1 | ====================================================== |
1 | 多线程技术优化后数据:花时:大约时间少了效果提升一倍, 总合计-花时:2427ms |
1 | ====================================================== |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
2020-04-13 IDEA创建springboot 项目
2020-04-13 xiaopiu产品设计