CountDownLatch的用法

CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。

主要方法

public CountDownLatch(int count);

public void countDown();

public void await()

举例:

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.CountDownLatch;

public class CountDownLatchTest {
	private final static SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	public static void main(String[] args) throws InterruptedException {
        CountDownLatch latch=new CountDownLatch(2);//两个工人的协作
        Worker worker1=new Worker("bao", 2000, latch);
        Worker worker2=new Worker("senan", 4000, latch);
        worker1.start();
        worker2.start();
        latch.await();	//等待所有worker完成工作
        System.out.println("all work done at "+sdf.format(new Date()));  	}
	static class Worker extends Thread{
		private String workerName;
		private int workTime;
		private CountDownLatch latch;
		public Worker(String workerName, int workTime, CountDownLatch latch){
			this.workerName = workerName;
			this.workTime = workTime;
			this.latch = latch;
		}
		public void run(){
			System.out.println(workerName + " start at" + sdf.format(new Date()));
			try {
				Thread.sleep(workTime);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}finally{
				latch.countDown();	//计数器减一
			}
			System.out.println(workerName + " end at" + sdf.format(new Date()));
		}
	}
}
时间: 2024-08-26 10:39:43

CountDownLatch的用法的相关文章

Java Concurrency - 浅析 CountDownLatch 的用法

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

【JAVA】java中CountDownLatch的用法,实例讲解

CountDownLatch主要用于多线程环境中,当所有的线程都countDown了,就会释放所有的等待的线程,await在到0之前一直等待. 直接看一段代码: package thread.thread; import java.util.concurrent.CountDownLatch; import java.util.concurrent.LinkedBlockingDeque; import java.util.concurrent.ThreadPoolExecutor; impor

CountDownLatch简单用法

public abstract class ControllerCenter implements Runnable { private CountDownLatch countDown; private String controllerCenterName; private boolean result; public ControllerCenter(CountDownLatch countDown, String controllerCenterName) { this.countDow

CountDownLatch用法---等待多个线程执行完才执行

CountDownLatch用法---等待多个线程执行完才执行 一.CountDownLatch用法 CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能.比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了. CountDownLatch类只提供了一个构造器: 1 public CountDownLatch(int count) {  };  //参数count为计数值

CountDownLatch 用法

概述 CountDownLatch是java.util.concurrent包中一个类, 构造方法 CountDownLatch(int count): 定义计数器   count 为线程的数量 , 主要方法  计数器减一 public void countDown() { sync.releaseShared(1); } 等待其他运行结束 public void await() throws InterruptedException { sync.acquireSharedInterrupti

Java并发编程:CountDownLatch、CyclicBarrier和Semaphore

在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法. 以下是本文目录大纲: 一.CountDownLatch用法 二.CyclicBarrier用法 三.Semaphore用法 若有不正之处请多多谅解,并欢迎批评指正. 请尊重作者劳动成果,转载请标明原文链接: http://www.cnblogs.com/dolphin0520/p/3920397.htm

CountDownLatch,CyclicBarrier,Semaphore的使用

什么时候使用CountDownLatch CountDownLatch原理和示例 Semaphore信号量的原理和示例 CyclicBarrier的用法 CyclicBarrier 和 CountDownLatch 在用法上的不同: 1.CountDownLatch 适用于一组线程和另一个主线程之间的工作协作.一个主线程等待一组工作线程的任务完毕才继续它的执行是使用 CountDownLatch 的主要场景:CyclicBarrier 用于一组或几组线程,比如一组线程需要在一个时间点上达成一致,

使用Java辅助类(CountDownLatch、CyclicBarrier、Semaphore)并发编程

在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法 一.CountDownLatch用法 CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能.比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了. CountDownLatch类只提

CountDownLatch、CyclicBarrier和Semaphore使用

CountDownLatch CountDownLatch是用来线程计数的.等待一组线程全部执行完后再本线程继续执行.如:A线程需要等待B.C和D(由初始化CountDownLatch参数觉得等待多少个线程)线程执行完后再执行. 主要的方法: // 构造方法,count决定等待多少个线程 public CountDownLatch(int count) // 等待线程完成数减1 public void countDown() // 调用await本线程会挂起,当等待线程未完成数为0,即count