`

CountDownLatch示例

阅读更多
import java.util.concurrent.CountDownLatch;
/**
 * 这个适用于等待N个线程执行完任务,再执行另外的线程的任务。
 * @author Administrator
 *
 */
public class Driver {
	private  int N = 5;
	void test() throws InterruptedException {
	     CountDownLatch startSignal = new CountDownLatch(1);
	     CountDownLatch doneSignal = new CountDownLatch(N);//make sure the "N" equal the number of threads

	     for (int i = 0; i < N; ++i) // create and start threads
	       new Thread(new Worker(startSignal, doneSignal)).start();

	     long start = System.nanoTime();// don't let run yet
	     startSignal.countDown();      // let all threads proce
	     System.out.println(startSignal.getCount());
	     doneSignal.await();           // make the main thread wait for all to finish
	     long end = System.nanoTime();
	     System.out.println("time = " + (end -start)+"ns "+Thread.currentThread().getName());//所有等待的线程执行完了,才会执行这行语句。
	   }
	
	public static void main(String ...args){
		Driver dr = new Driver();
		try{
			dr.test();
		}catch (Exception e) {
			e.printStackTrace();
		}
		
	}
}

class Worker implements Runnable {
	   private final CountDownLatch startSignal;//startSignal被多个线程共用
	   private final CountDownLatch doneSignal;//doneSignal被多个线程共用
	   Worker(CountDownLatch startSignal, CountDownLatch doneSignal) {
	      this.startSignal = startSignal;
	      this.doneSignal = doneSignal;
	   }
	   public void run() {
	      try {
	        startSignal.await();//使当前线程在锁存器倒计数至零之前一直等待,除非线程被中断。
	        doWork();
	        doneSignal.countDown();//递减锁存器的计数,如果计数到达零,则释放所有等待的线程,执行一次计数器减去1,不会自动减到0
	} catch (InterruptedException ex) {} // return;
	   }

	   void doWork() {
		   System.out.println("working..."+Thread.currentThread().getName());
	   }
	 }

分享到:
评论

相关推荐

    并发编程示例,涉及到AtomicXXX、CountDownLatch、线程池等

    并发编程的一些小示例 1.等待通知的几种方式,包括Object的wait/notify,Condition的await/signal 2. CountDownLatch,统一控制多线程开始和结束 3.原子操作,AtomicXXX 4.线程池

    Java concurrency之CountDownLatch原理和示例_动力节点Java学院整理

    CountDownLatch是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。 下面通过本文给大家分享Java concurrency之CountDownLatch原理和示例,需要的的朋友参考下吧

    java线程并发countdownlatch类使用示例

    javar的CountDownLatch是个计数器,它有一个初始数,等待这个计数器的线程必须等到计数器倒数到零时才可继续。

    如何使用CountDownLatch同步java多线程

    主要介绍了如何使用CountDownLatch同步java多线程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Java线程并发工具类CountDownLatch原理及用法

    主要介绍了Java线程并发工具类CountDownLatch原理及用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Java并发工具类示例

    在Java中并发协同工具类,以及场景的示例

    JAVA CountDownLatch(倒计时计数器)用法实例

    主要介绍了JAVA CountDownLatch(倒计时计数器)用法实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    JAVA CountDownLatch与thread-join()的区别解析

    主要介绍了JAVA CountDownLatch与thread-join()的区别解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    详解java CountDownLatch和CyclicBarrier在内部实现和场景上的区别

    主要介绍了详解java CountDownLatch和CyclicBarrier在内部实现和场景上的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    java并发编程专题(八)----(JUC)实例讲解CountDownLatch

    主要介绍了java CountDownLatch的相关资料,文中示例代码非常详细,帮助大家理解和学习,感兴趣的朋友可以了解下

    java线程并发cyclicbarrier类使用示例

    CyclicBarrier类似于CountDownLatch也是个计数器,不同的是CyclicBarrier数的是调用了CyclicBarrier.await()进入等待的线程数,当线程数达到了CyclicBarrier初始时规定的数目时,所有进入等待状态的线程被唤醒并继续...

    Java并发编程实战

    14.6.2 Semaphore与CountDownLatch258 14.6.3 FutureTask259 14.6.4 ReentrantReadWriteLock259 第15章 原子变量与非阻塞同步机制261 15.1 锁的劣势261 15.2 硬件对并发的支持262 15.2.1 比较并交换263 ...

    java线程并发semaphore类示例

    Java 5.0里新加了4个协调线程间进程的同步装置,它们分别是Semaphore, CountDownLatch, CyclicBarrier和Exchanger,本例主要介绍Semaphore,Semaphore是用来管理一个资源池的工具,可以看成是个通行证

    javaconcurrent源码-java7-source-code:Java7源码/Concurrency同步

    CountDownLatch 闭锁 AQS 锁的公共类 20180514 String, 部分Character 20180508 除 Set 外, 常用的 Collection 都已经分析完毕 简化语言描述, 增加测试用例(实践用法) 接触到新的类再看源码(不能脱离实际场景瞎看, ...

    customcode:至

    CountDownLatch 循环屏障 换货商 重入锁 读锁 信号 线程池 BlockingQueue-生产者消费者 具有一些集合类的自定义实现 有以下示例代码 易挥发的 僵局 java.util.concurrent.Phaser构造 执行者 使用单独的线程打印奇数...

    Java多线程同步器代码详解

    主要介绍了Java多线程同步器代码详解,文章分别介绍了是CountDownLatch,Semaphore,Barrier和Exchanger以及其相关代码示例,具有一定参考价值,需要的朋友可以了解下。

    java8源码-baijia123:常用工具类及测试类

    JAVA并发编程实战的示例及其他 第5章:基础构建模块 对应类包com.baijia123.concurrent TestHarnes-&gt;在计时测试中使用CountDownLatch(闭锁)来启动和停止线程 Preloader-&gt;使用FutureTask来提前加载稍后需要的数据 ...

    java-siridb-connector:适用于JAVA的SiriDB连接器

    该示例中显示的代码使用countDownLatch,它等待请求完成。 在这种情况下,连接器将异步运行,并且不应阻塞主线程。 查询和插入的结果将存储在阻塞队列中。 该阻塞队列等待,直到completionHandlers返回结果为止。 此...

Global site tag (gtag.js) - Google Analytics