多线程之赛跑-CountDownLatch

CountDownLatch
等所有的线程准备好之后发起执行后续流程.
 
代码如下:
/**
 * @author jeremy.li
 * @date 2020/11/30
 * @description
 */
public class CountDownLatchTest implements Runnable {

    static CountDownLatch countDownLatch = new CountDownLatch(5);


    @Override
    public void run() {
        try {
            Thread.sleep(new Random().nextInt(9)*1000);
            System.out.println(Thread.currentThread().getName() + ",已准备就绪");
            countDownLatch.countDown();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }

    public static void main(String[] args) throws InterruptedException {
        for (int i = 1; i < 6; i++) {
            CountDownLatchTest countDownLatchTest = new CountDownLatchTest();
            Thread thread = new Thread(countDownLatchTest, i + " 号运动员");
            thread.start();
        }
        countDownLatch.await();
        System.out.println("----开跑----");
    }
}

  

 
关键方法:
await();
  阻塞当前线程
countDown();
  计数器-1,
描述:
  await方法在主线程中执行,阻塞主线程,countDown在子线程中执行,将创建CountDownLatch时初始化计数器-1,当计数器=0时。主线程阻塞取消。

posted @ 2020-11-30 17:49  一入IT岁月催  阅读(172)  评论(0)    收藏  举报