美文网首页Java-多线程
CountDownLatch实现多线程等待后共同执行

CountDownLatch实现多线程等待后共同执行

作者: PageThinker | 来源:发表于2020-04-15 15:02 被阅读0次
1.png

01 CountDownLatch

CountDownLatch 通过 count 计数实现屏障设定(阻塞),当满足设定的条件后一个或者多个线程时候一起执行。这里的屏障指的就是一个线程会被阻塞,不再继续向下执行。

CountDownLatch 中的计数器会做减法。当执行到它的 await()方法之后,如果计数器不为 0,则阻塞,知道其他线程调用 countDown()之后扣减计数为 0 之后,原本阻塞的线程才会继续向下执行。

02 缺点

计数不能被重置。这就导致实现过程中不能动态的修改计数,只能按照设定好的计数来使用。

03 常用方法

await() 阻塞并等待计数为0再往下执行。

await(long timeout, TimeUnit unit) 阻塞并等待指定的时间,如果在指定的时间内计数未能到 0,则自动唤醒,向下执行。

countDown() 计数器中的计数减一

getCount() 获得当前计数的值

04 案例

Game.java

package com.page.concurrent.countdownlatch;

import java.util.ArrayList;
import java.util.concurrent.CountDownLatch;

public class Game {
    public static void main(String[] args) throws InterruptedException {
        CountDownLatch countDownLatch = new CountDownLatch(1);

        ArrayList<Runner> runners = new ArrayList<>();
        for (int i = 0; i < 3; i++) {
            Runner runner = new Runner(countDownLatch);
            runner.start();
            runners.add(runner);
        }

        System.out.println("ready?");
        countDownLatch.await();
        System.out.println("Go!");
    }
}

Runner.java

package com.page.concurrent.countdownlatch;


import java.util.concurrent.CountDownLatch;

public class Runner extends Thread {

    private final CountDownLatch countDownLatch;

    public Runner(CountDownLatch countDownLatch) {
        this.countDownLatch = countDownLatch;
    }

    @Override
    public void run() {
        try {
            Thread.sleep(1000 * 5);
        } catch (InterruptedException e) {
            System.out.println("Error " + e.getMessage());
        }
        System.out.println(Thread.currentThread().getName() + " had ready! Waiting other runners.");
        countDownLatch.countDown();
        System.out.println(Thread.currentThread().getName() + " GO!");
    }
}

相关文章

  • CountDownLatch实现多线程等待后共同执行

    01 CountDownLatch CountDownLatch 通过 count 计数实现屏障设定(阻塞),当满...

  • CountDownLatch的使用

    CountDownLatch是java中一个协调多线程的工具类,假如多线程在执行后,需要等待所有都执行完再执行下一...

  • CountDownLatch与CyclicBarrier

    CountDownLatch 简介 CountDownLatch使用AQS同步框架实现了多线程计时器。主线程等待所...

  • 面试官:说说CountDownLatch,CyclicBarri

    CountDownLatch CountDownLatch适用于在多线程的场景需要等待所有子线程全部执行完毕之后再...

  • JUC-CountDownLatch和CyclicBarrier

    CountDownLatch等待多线程完成,该工具类适用于主线程等待其他子线程结束后再执行的场景 运行结果 第二个...

  • CountDownLatch(计数器)

    CountDownLatch 概念 countDownLatch这个类使一个线程等待其他线程各自执行完毕后再执行。...

  • CountDownLatch

    1. 概述 CountDownLatch(多线程控制工具)能够使一个主线程等待其他线程完成各自的工作后再执行自己的...

  • 【java】并发-同步器

    多线程处理中,有时需要等待一些线程到达后才继续执行,这就需要线程同步器。 CountDownLatch 闭锁 ja...

  • Java中的并发工具类

    CountDownLatch等待多线程完成 CountDownLatch允许一个或多个线程等待其他线程完成操作。 ...

  • 笔记:并发工具类

    1. 等待多线程完成的CountDownLatch 简介 CountDownLatch 允许一个或多个线程等待其他...

网友评论

    本文标题:CountDownLatch实现多线程等待后共同执行

    本文链接:https://www.haomeiwen.com/subject/dgucvhtx.html