倒计时器CountDownLatch的使用

使用场景

在不同系统之间进行沟通的时间,涉及到API接口的交互,对接口的响应时间每个系统有不同的要求。在为其他系统提供API的时候,在系统内部这个接口可能依赖其他的服务,此时要是一步一步检查完成,难免耗时过多。此时便需要对接口进行优化,采用多线程并行完成每个小的前任务,提高效率。

测试代码如下

package taren;

import java.util.Random;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * @Description 倒计时器
 * @Authror
 * @DATE 2019/7/17 9:19
 */
public class CountDownLatchDemo implements Runnable {

static final CountDownLatch latch = new CountDownLatch(5);
static final CountDownLatchDemo demo = new CountDownLatchDemo();

@Override
public void run() {
    try {
        //模拟前置任务
        Thread.sleep(new Random().nextInt(10) * 1000);
        System.out.println("检查前置任务ing...");
    } catch (InterruptedException e) {
        e.printStackTrace();
    } finally {
        //计数减一
        latch.countDown();
    }
}


public static void main(String[] args) throws InterruptedException {
    ExecutorService exec = Executors.newFixedThreadPool(5);
    for (int i = 0; i < 5; i++) {
        exec.submit(demo);
    }
    // 等待前置任务的完成
    latch.await();
    // 准备工作已做好
    System.out.println("OK!检查完毕,可以做事了!");
    // 关闭线程池
    exec.shutdown();
}
}   

总的来说,假设这个接口的提供需要5个前置任务完成才能完成,就开启5个线程去分别完成每个前置任务,每完成一个,倒计时减一,直到完成为止。

你可能感兴趣的:(倒计时器CountDownLatch的使用)