我们在写服务的时候,有时候需要利用线程池来批量作业,这个时候需要等全部作业处理完后统一返回,这种情况只能用CountDownLatch来处理了,

比如下面的代码实例

    @RequestMapping(value = \"/demo4\", method = RequestMethod.GET)
    public String demo4() throws Exception {
        System.out.println(\"begin ===\");
       // CountDownLatch latch = new CountDownLatch(20);
        for (int i = 0; i < 20; i++) {
            if (i % 2 == 0) {
                Thread.sleep(new Random().nextInt(120));
                new Thread(new A(\"22\", \"777\")).start();

            } else {
                Thread.sleep(new Random().nextInt(544));
                new Thread(new A(\"333\", \"666\")).start();
            }
        }
        //latch.await();
        System.out.println(\"end ===\");
        return \"success\";

    }


    @Data
    @AllArgsConstructor
    class A implements Runnable {
        private String venderName;
        private String cookie;
       // private CountDownLatch latch;


        @Override
        public void run() {
            try {
                Thread.sleep(new Random().nextInt(5000));
                System.out.println(\"venderName->\" + venderName);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                //latch.countDown();
            }


        }
    }

 

收藏 打印