CountDownLatch类是在java.util.concurrent包下,众所周知该包是并发编程最常用的包,CountDownLatch通过简单的计数来保证达到同步的效果,通过CountDownLatch的数量来控制,当CountDownLatch的数量为0时都会续约执行,否则就通过await()方法一直等待,也可以调用带参数的await方法,该方法表示在一定时间了所有的线程还没有执行完成就续约往下执行 该类主要有以下几个方法
package com.ls.skynet; import java.util.concurrent.CountDownLatch; public class CountDownLatchTest { public static void main(String[] args) { CountDownLatch cd = new CountDownLatch(3); new Thread1(cd).start();//线程内调用countDown()使CountDownLatch数量减一 new Thread2(cd).start(); cd.countDown();//也可以直接执行减少操作 try { cd.await();//当CountDownLatch为0时才往下执行,否则一直等待 System.out.println("CountDownLatch 执行线束了"); } catch (InterruptedException e) { e.printStackTrace(); } } public static class Thread1 extends Thread{ private CountDownLatch cd ; public Thread1(CountDownLatch cd ){ this.cd=cd; } @Override public void run() { System.out.println("Thread1进入了"); try { Thread.sleep(1000); cd.countDown(); } catch (InterruptedException e) { e.printStackTrace(); } } } public static class Thread2 extends Thread{ private CountDownLatch cd ; public Thread2(CountDownLatch cd ){ this.cd=cd; } @Override public void run() { System.out.println("Thread2进入了"); try { Thread.sleep(1000); cd.countDown(); } catch (InterruptedException e) { e.printStackTrace(); } } } }