项目中设计到,查询近12个月的数据成长轨迹,本想着直接通过数据库中查询得到,但实际的业务场景中涉及到关联表和统计查询等,使用时间匹配后无法使用时间索引进行优化查询等原因放弃数据库优化策略。后参考网上优化建议,在Java中for循环中采用线程的方式进行速度优化。暂时查询速度是有所提高,只是不太后期会不会因为线程问题导致别的未知问题。暂时记录本次优化过程。
因正常的线程方式Thread、Runnable方式因不能获取返回值,所以采用callable实现该功能。
1、创建对应的线程类实现Callable接口
class CallableThread implements Callable
2、具体的业务逻辑中,通过线程池调用该线程
List
通过线程池调用对应的线程,具体某个线程通过传值后处理单独的业务逻辑后,latch.await()等待所有的线程执行完成后,针对返回值进行数据合并后返回给前台。