java并发包之CountDownLatch

231 阅读1分钟
  • 概念:

    • countDownLatch这个类使一个线程等待其他线程各自执行完毕后再执行。
    • 是通过一个计数器来实现的,计数器的初始值是线程的数量。每当一个线程执行完毕后,计数器的值就-1,当计数器的值为0时,表示所有线程都执行完毕,然后在闭锁上等待的线程就可以恢复工作了。
  • 例子:10人赛跑,都到达终点了裁判喊game over

import java.util.concurrent.CountDownLatch;

public class CountDownLatchTest {

    public static void main(String[] args) throws InterruptedException {
        CountDownLatch cdl = new CountDownLatch(10);
        for (int i = 0; i < 10; i++) {
            new Thread(new Student1(cdl, "学生" + i)).start();
        }
        cdl.await();
        System.out.println("------>game over");
    }
}

class Student1 implements Runnable {
    private String name;
    private CountDownLatch cdl;

    public Student1(CountDownLatch cdl, String name) {
        this.cdl = cdl;
        this.name = name;
    }

    @Override
    public void run() {
        try {
            Thread.sleep((long) (Math.random() * 2000));
            System.out.println(name + "到达终点");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        cdl.countDown();
    }
}
  • 执行结果:

学生6到达终点
学生8到达终点
学生4到达终点
学生5到达终点
学生2到达终点
学生7到达终点
学生0到达终点
学生1到达终点
学生9到达终点
学生3到达终点
------>game over