多线程写excel数据思路
1背景
有时候会向excel文件中写入数据,为了提高写入速度,需要向每个sheet页同时写入数据;此时,可以采用多线程的方式同时进行写入,提高效率。
2思路
既然需要用到多线程的,那么肯定需要创建多线程的工具、控制多线程的工具。在这里提供这样一类工具:CountDownLatch类、ExecutorService类(这里只是一种方式,当然还有其他的方式)。
2.1CountDownLatch类
该类是用来同步多线程处理的类,只有等到每个线程运行完成后,它才会继续后面的流程;打个这样的比方:有十个人在十条跑道上比赛,每一个人占用一条跑道,在终点处有个计数员,他负责的任务是必须要等到10位运动员都跑到终点,他才可以宣布比赛结束,否则整个比赛还在继续进行。这里的CountDownLatch对象就是相当于计数员的角色。它用到的三个方法是:
- 构造函数:new CountDownLatch(线程个数)。
- counDown():每个线程结束时都要调用该方法,计数器减一。
- await():在主线程中调用该方法,一直等到计数器减到为0为止,否则主线程一直暂定在这里。
2.2ExecutorService类
可以通过Autowire注解的方式生菜ExecutorService对象,然后通过submit方法来启动一个线程,大致写法如下:
@Autowire private ExecutorService executorService; public void test() { executorService.submit(()->{ // Todo 具体的逻辑实现 }) }
2.3StopWatch类
这个类是一个用来分析任务耗时的工具类,非常直观、简洁;使用起来也很简单,大致如下:
StopWatch stopWatch = new StopWatch(Thread.currentThread().getStackTrace()[1].getMethodName()); stopWatch.start(“taskName”); // Todo 执行具体的任务 stopsWatch.stop();
数据分析示例:
----------------------------------------------
ns % Task name
3623048300 028% test2
114789400 010% test1
9120146000 071% test3
----------------------------------------------
- ns:时间单位,纳秒
- %:任务耗时占比,值越大,耗时越长
- Task name:任务名称
3小结
上文只是提到在遇到写excel时需要同时写入数据的实现思路,仅供参考。
阅读是一种修养,分享是一种美德。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架