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);设置超时时间