倒数计数器-CountDownLatch



最近写一个多线程程序,老是MAIN方法执行完了子线程还没执行完(不知道以前怎么玩儿的),得不到最终结果,于是找到了CountDownLatch



CountDownLatch是一个同步辅助类,java.util.concurrent.CountDownLatch,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。用给定的计数 初始化 CountDownLatch。由于调用了 countDown() 方法,所以在当前计数到达零之前,await 方法会一直受阻塞。之后,会释放所有等待的线程,await 的所有后续调用都将立即返回。这种现象只出现一次——计数无法被重置。

一个线程(或者多个), 等待另外N个线程完成某个事情之后才能执行



主要方法:

public void countDown()

public boolean await(long timeout,TimeUnit unit) throws InterrupterdException



详细可以参考:http://blog.csdn.net/shihuacai/article/details/8856370



倒数计数器-CountDownLatch

时间: 2024-10-08 18:12:05

倒数计数器-CountDownLatch的相关文章

Java并发程序设计(20)并发锁之倒数锁CountDownLatch

1.1. 倒数锁CountDownLatch CountDownLatch是另外一种线程同步工具.参与倒数的每个线程在工作完成后都执行countDown()方法,当所有线程都执行完后,会唤醒一个或多个在等待倒数计数为0的线程. package com.test.concurrence; import java.util.Date; import java.util.Random; import java.util.concurrent.CountDownLatch; import java.ut

并发库应用之九 & 到时计数器CountDownLatch应用

申明:CountDownLatch好像倒计时计数器,调用CountDownLatch对象的countDown方法就将计数器减1,当到达0时,所有等待者就开始执行. java.util.concurrent.CountDownLatch 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待.用给定的计数 初始化 CountDownLatch.由于调用了 countDown() 方法,所以在当前计数到达零之前,await 方法会一直受阻塞.之后,会释放所有等待的线程,

Java多线程系列——计数器 CountDownLatch

简介: CountDownLatch 是一个非常实用的多线程控制工具类,通常用来控制线程的等待,它可以让某个线程等待直到倒计时结束 CountDownLatch 提供了两个主要的方法,await().countDown(). await:使当前线程阻塞,等待计数器为 0 countDown:计数器减一,计数为零时,释放所有在等待的线程 实例: public class CountDownLatchDemo implements Runnable { static final CountDownL

多线程(七、同步计数器-CountDownLatch)

CountDownLatch是一个线程的同步计数器,主要有2个使用场景. 1.作为一个开关,N个子线程准备就绪,等待主线程的放行,然后子线程一起开始执行. Task package com.jane; import java.util.concurrent.CountDownLatch; public class Task implements Runnable { private CountDownLatch countDownLatch; private String name; publi

java计数器CountDownLatch

CountDownLatch里面有个属性为state,当为零时触发代码往下执行,代码如下: package threadLock; import java.util.Random; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class CountDownLatchTest

Java并发编程原理与实战六:主线程等待子线程解决方案

本文将研究的是主线程等待所有子线程执行完成之后再继续往下执行的解决方案 public class TestThread extends Thread { public void run() { System.out.println(this.getName() + "子线程开始"); try { // 子线程休眠五秒 Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } System.

java 5线程中 Semaphore信号灯,CyclicBarrier类,CountDownLatch计数器以及Exchanger类使用

先来讲解一下Semaphore信号灯的作用:  可以维护当前访问自身的线程个数,并提供了同步机制, 使用semaphore可以控制同时访问资源的线程个数 例如,实现一个文件允许的并发访问数. 请看下面的演示代码: 1 public class SemaphoreTest 2 { 3 public static void main(String[] args) 4 { 5 //创建一个带有缓存的线程池 6 ExecutorService service = Executors.newCachedT

java同步工具类之CountDownLatch

 在一些应用场合中,某段程序需要等待某个条件达到要求后才能执行,或者等待一定长的时间后此行,从jdk1.5开始就可以使用CountDownLatch实现, CountDownLatch类是一个同步倒数计数器,构造时传入int参数,该参数就是计数器的初始值,每调用一次countDown()方法,计数器减1,计数器大于0 时,await()方法会阻塞后面程序执行,直到计数器为0. public class CountdownLatchTest { public static void main(

CountDownLatch与CyclicBarrier

CountDownLatch 倒数计数器 一个线程等待其他所有线程 一.CountDownLatch用法 CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能.比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了. await() throws InterruptedException:调用该方法的线程等到构造方法传入的N减到0的时候,才能继续往下执行: await(lon