java开启多线程同时查询数据库(线程池+redis缓存优化)

白色玫瑰 程序猿

时间: 2023-05-22 阅读: 1 字数:3504

{}
java多线程查询数据库(线程池) 需求介绍: 调用接口后一个页面要展示两个列表,而且数据量很大。 分析: 如果按原始方法进行两次查询再将结果返回当然也是可以的。但是查询时间就是两个查询的和,数据量很小的话...

java多线程查询数据库(线程池)

需求介绍:

调用接口后一个页面要展示两个列表,而且数据量很大。

分析:

如果按原始方法进行两次查询再将结果返回当然也是可以的。但是查询时间就是两个查询的和,数据量很小的话推荐此方法。但如果数据量很大,正常情况下SELECT * 的时间很长,而且还是两张表,整体的接口执行时间就很慢,很影响用户体验。所以我们必须进行优化,所以想到用多线程来进行查询,同时开启两个线程来查询数据库,最后时间就很快了。再加上整个列表会进行分页,大数据量的情况下会有很多页数据。由于后面的数据很少会去看到,所以我们可以将前1000条数据放在redis里(redis的读取速度很快很快)。如果真的要看1000条之后的数据在掉接口去查就行了。至于有人说,万一数据变化了怎么办。这里具体看项目需求了,如果说展示的频率不高,可以考虑在特定时间执行定时任务来同步数据就不做演示了,这次主要是线程池技术。

直接上代码:

创建线程池
public  class CreateThreadUtil {

   private static final int THREAD_POOL_SIZE = 2;//线程数量

   public static ThreadPoolExecutor createThread(String guid)//传入一个线程池名字,可随意
   {
      ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
            .setNameFormat(guid).build();//创建线程工厂

       //创建线程池
      ThreadPoolExecutor executor = new ThreadPoolExecutor(THREAD_POOL_SIZE,
            THREAD_POOL_SIZE,
            0L,
            TimeUnit.MILLISECONDS,
            new LinkedBlockingQueue<>(1024),
            namedThreadFactory,
            new ThreadPoolExecutor.AbortPolicy());
      return executor;
   }
}
写线程方法
      //定义第一个线程方法
   Callable getTableDetail = new Callable<List>() {
         @Override
         public List call() {
            String sql = "select * from xxx ";
            return jdbcTemplate.queryForList(sql);
         }
      };
      //定义第二个线程方法
      Callable getFieldList = new Callable<List<Integer>>() {
         @Override
         public List call() {
            String sql2 = "SELECT * FROM yyy";
            return jdbcTemplate.queryForList(sql2);

         }
      };
      //创建线程任务
      FutureTask getTableDetailTask = new FutureTask(getTableDetail);
      FutureTask getFieldListTask = new FutureTask(getFieldList);
      //开启线程
      executor.submit(getTableDetailTask);
      executor.submit(getFieldListTask);
      //优美得关闭线程
      executor.shutdown();

至此接口调用一下就可以同时查询出两组数据,时间大大减少

原文地址:https://blog.csdn.net/qq_44772660/article/details/112248726?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168474998616800188596623%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=168474998616800188596623&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-3-112248726-null-null.142^v87^control_2,239^v2^insert_chatgpt&utm_term=java%E4%BC%98%E5%8C%96

本文章网址:https://www.sjxi.cn/detil/804264dac33f4a71a7d7a1ee1ded716e

最新评论

当前未登陆哦
登陆后才可评论哦

湘ICP备2021009447号

×

(穷逼博主)在线接单

QQ: 1164453243

邮箱: abcdsjx@126.com

前端项目代做
前后端分离
Python 爬虫脚本
Java 后台开发
各种脚本编写
服务器搭建
个人博客搭建
Web 应用开发
Chrome 插件编写
Bug 修复