CountDownLatch的await方法可以阻塞当前线程,直到CountDownLatch初始化的计数器为0,才会唤醒线程。
1、构造一个任务类
public class Task implements Runnable {
private CountDownLatch countDownLatch;
private String name;
private long rest;
public Task(CountDownLatch countDownLatch, String name, long rest) {
this.countDownLatch = countDownLatch;
this.name = name;
this.rest = rest;
}
@Override
public void run() {
try {
Thread.sleep(rest);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("我是" + name + ", 执行" + countDownLatch.getCount());
countDownLatch.countDown();
}
}
2、输出看看
public class Client {
public static void main(String[] args) {
CountDownLatch latch = new CountDownLatch(4);
new Thread(new Task(latch, "张三", 2000)).start();
new Thread(new Task(latch, "李四", 3000)).start();
new Thread(new Task(latch, "王五", 1000)).start();
new Thread(new Task(latch, "刘二", 6000)).start();
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("我是主线程");
}
}
我是王五, 执行4
我是张三, 执行3
我是李四, 执行2
我是刘二, 执行1
我是主线程