前言:前段时间有个需求,需要循环调用多次中台接口查询数据,为了减少等待时间采用多线程的方式调用

不多bb,直接上测试代码

text
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
   @Test
   public void testMultiThread() throws InterruptedException {
      int i = 5;
      System.out.println("=====多线程开始=====");
      // 创建闭锁对象抓住所有线程,构造器指定倒数次数
      CountDownLatch countDownLatch = new CountDownLatch(i);
      while (i > 0) {
         int finalI = i;
         // 启用多线程
         CompletableFuture.runAsync(() -> {
            System.out.println(finalI);
            // 线程执行结束则countDown,倒数一次
            countDownLatch.countDown();
         });
         i--;
      }
      // 等待所有线程都countDown,倒数完毕,结束线程
      countDownLatch.await();
      System.out.println("=====多线程结束=====");
   }

本次是使用CompletableFuture对象的runAsync()方法直接创建子线程。

而CountDownLatch 对象是用于阻塞主线程,如果没有的话,代码会在子线程还未执行结束时就开始执行下面的逻辑

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