前因:由于项目开发查询单个数据量比较大的数据库,平均查询一条需要2秒左右,然而需要查询几个表的数据并且合并数据再处理,如果不开多线程跑的话,那么响应时间2s*n个需要处理的表,大大影响用户体验,所以有了多线程处理方案代码直接贴上,方便以后遇到相同情况处理起来更加容易上手 //需要汇总的信息列表 List> listAll =new ArrayList<>(); //锁 Lock lock=new ReentrantLock(); //线程池 ExecutorService cachedThreadPool = Executors.newCachedThreadPool(); //计时器 final CountDownLatch countDownLatch = new CountDownLatch("线程的数量"); //开启多个线程 for (int i=0;i<线程的数量;i++) { Integer i1=i; //跑线程 cachedThreadPool.execute(() -> { List> maps = mapper访问数据库操作 //上锁 确保多线程的共享变量的值 lock.lock(); listAll.addAll(maps); lock.unlock(); //计时器 倒数 countDownLatch.countDown(); }); } //等待所有线程执行完毕 countDownLatch.await(); //关闭线程池 cachedThreadPool.shutdown(); //再处理listAll 这时的listAll已经是几个线程共同跑出来的值
多线程开发访问数据库实践
最新推荐文章于 2023-10-07 12:32:20 发布