CountDownLatch 使用详解

简介: 本文主要对CountDownLatch 的相关知识点进行了介绍和讲解

一、什么是CountDownLatch

CountDownLatch是一个计数器,它允许一个或多个线程等待其它线程完成操作。它通常用来实现一个线程等待其它多个线程完成操作之后再继续执行的操作。

常见的应用场景是开启多个线程同时执行某个任务,等到所有任务执行完再执行特定操作,如汇总统计结果。

二、代码实现

importjava.util.concurrent.CountDownLatch;
importjava.util.concurrent.TimeUnit;
publicclassCountDownLatchDemo {
staticfinalintN=4;
staticCountDownLatchlatch=newCountDownLatch(N);
publicstaticvoidmain(String[] args) throwsInterruptedException {
for (inti=0; i<N; i++) {
newThread(newThread1()).start();
        }
latch.await(5000, TimeUnit.MILLISECONDS);
// 调用await()方法的线程会被挂起,它会等待直到count值为0才继续执行;等待timeout时间后count值还没变为0的话就会继续执行System.out.println("数据汇总完成 ------------");
    }
staticclassThread1implementsRunnable {
@Overridepublicvoidrun() {
try {
System.out.println(Thread.currentThread().getName() +"开始读取数据,处理==========");
Thread.sleep(1000);
            } catch (InterruptedExceptione) {
e.printStackTrace();
            } finally {
latch.countDown();
            }
        }
    }
}

三、打印结果

Thread-0开始读取数据,处理==========Thread-3开始读取数据,处理==========Thread-2开始读取数据,处理==========Thread-1开始读取数据,处理==========数据汇总完成------------Processfinishedwithexitcode0

四、CyclicBarrier和CountDownLatch区别

CyclicBarrier 和 CountDownLatch 都能够实现线程之间的等待。

CountDownLatch用于某个线程等待其他线程执行完任务再执行。CyclicBarrier用于一组线程互相等待到某个状态,然后这组线程再同时执行。 CountDownLatch的计数器只能使用一次,而CyclicBarrier的计数器可以使用reset()方法重置,可用于处理更为复杂的业务场景。

相关文章
|
3月前
|
Java 测试技术
CountDownLatch、CyclicBarrier让线程听我号令
CountDownLatch、CyclicBarrier让线程听我号令
42 0
|
7月前
|
Java BI
CountDownLatch,CyclicBarrier,Semaphore
在开发过程中我们常常遇到需要对多个任务进行汇总,比如报表,或者大屏显示,需要将所有接口的数据都 获取到后再进行汇总,如果使用同步的方式,那么会比较耗时,体验不好,所以我们使用多线程,但是使用多线程 只能异步的执行,有些接口响应比较快,有些比较慢,而返回结果之间又有依赖,这样就无法汇总了, 所以我们引入了CountDownLatch,它能让所有子线程全部执行完毕后主线程才会往下执行,如果子线程没有执行完毕 ,那么主线程将无法继续向下执行。
39 0
|
3月前
CountDownLatch和CyclicBarrier你使用过吗?
CountDownLatch和CyclicBarrier你使用过吗?
25 0
|
5月前
CountDownLatch和CyclicBarrier的区别
CountDownLatch和CyclicBarrier的区别
21 0
CountDownLatch和 CyclicBarrier的使用
CountDownLatch和 CyclicBarrier的使用
CountDownLatch、CyclicBarrier的使用(门栓)
CountDownLatch、CyclicBarrier的使用(门栓)
87 0
CountDownLatch&CyclicBarrier&Semaphore
本文将介绍一下CountDownLatch 、 CyclicBarrier 、 Semaphore这几个控制线程的类。
 CountDownLatch&CyclicBarrier&Semaphore
CountDownLatch
CountDownLatch是从JDK1.5开始提供的一个辅助并发编程的一个类,它位于在JUC包中。 允许一个或多个线程等待,直到在其他线程中执行的一组操作完成。
116 0
|
Java
CountDownLatch:别浪,等人齐再团!(1)
CountDownLatch:别浪,等人齐再团!(1)
93 0
CountDownLatch:别浪,等人齐再团!(3)
CountDownLatch:别浪,等人齐再团!(3)
92 0