主线程阻塞多线程使用CountDownLatch

 final CountDownLatch countDownLatch = new CountDownLatch(3);
        Thread t = new Thread(() -> {
            System.out.println("阻塞线程1");
            System.out.println("线程1执行完啦");
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            countDownLatch.countDown();
        });
        Thread p = new Thread(() -> {
            System.out.println("阻塞线程2");
            System.out.println("线程2执行完啦");
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            countDownLatch.countDown();
        });
        t.start();
        p.start();
        countDownLatch.await(3, TimeUnit.SECONDS);
//        countDownLatch.await();
        System.out.println("主线程结束");
    }

CountDownLatch 构造时设置一个计数的值如:new CountDownLatch(3);

countDownLatch.countDown();每个线程执行完进行减少1

countDownLatch.await();主线程等待直到数量为0或者 countDownLatch.await(3, TimeUnit.SECONDS);设置超时时间

发布了85 篇原创文章 · 获赞 6 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/New_CJ/article/details/89233588