`

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());
	   }
	 }

分享到:
评论

相关推荐

    countdownlatch-example-sourcecode.zip

    4. **CountDownLatch示例** 压缩包中的`countdownlatch`文件可能包含了一个或多个人工创建的示例,展示了如何在实际项目中使用CountDownLatch。例如,模拟一个团队赛跑场景,所有队员出发后,裁判(主线程)等待...

    Java中的并发工具类.docx

    下面是一个简单的CountDownLatch示例: ```java static CountDownLatch c = new CountDownLatch(2); public static void main(String[] args) throws InterruptedException { new Thread(new Runnable() { @...

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

    CountDownLatch是Java并发编程中一个重要的工具类,用于协调多线程间的同步。它由Java并发包`java.util.concurrent`提供,主要用于解决一种场景:在主控线程等待多个子线程完成各自任务后再继续执行的情况。下面我们...

    java.并发工具类CountDownLatch(处理方案示例).md

    java.并发工具类CountDownLatch(处理方案示例).md

    利用 CountDownLatch 类实现线程同步

    在 `CountDownLatchDemo` 这个示例中,我们可能会看到以下代码结构: ```java CountDownLatch latch = new CountDownLatch(3); // 初始化计数器为3,代表3个线程 // 创建3个线程执行任务 new Thread(() -&gt; { // ...

    并发编程之CountDownLatch

    下面是一个使用 CountDownLatch 实现主线程和子线程通信的示例代码: ```java public class CountDownLatchTest { public static void main(String[] args) { final CountDownLatch cdOrder = new CountDownLatch...

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

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

    java线程并发countdownlatch类使用示例

    在示例代码中,`CountDownLatchTest`类展示了如何使用`CountDownLatch`。它创建了一个名为`ComponentThread`的线程类,这个类代表了需要初始化的组件。每个`ComponentThread`都有一个唯一的ID,并且在构造时传入了一...

    CountDownLatch Demo

    在 "CurrentTest" 这个示例文件中,可能包含了如何创建和使用 CountDownLatch 的代码片段。通常,测试代码会创建一个 CountDownLatch 对象,然后在线程中执行任务并调用 `countDown()`,最后在主线程中调用 `await()...

    并发工具类CountDownLatch(处理方案示例).md

    开发中碰到的

    CountDownLatch详解.docx

    在提供的示例代码中,我们创建了一个 CountDownLatch 实例,初始值为3,表示有3个工作线程需要完成任务。然后创建了2个等待线程,它们会在调用 `await()` 后进入等待状态。接着启动所有线程,工作线程在运行后调用 ...

    java并发编程之同步器代码示例

    Java并发编程之同步器代码示例 ...Java并发编程之同步器代码示例展示了Java中的同步器机制,包括CountDownLatch、Semaphore、Barrier和Exchanger队列同步器等,帮助开发者更好地理解和使用Java中的并发编程技术。

    Java中CountDownLatch进行多线程同步详解及实例代码

    下面是一个使用CountDownLatch来同步10个参会者和一个主持人参加的一个会的示例代码: ```java public class VideoConference implements Runnable { private final CountDownLatch countDownLatch; private int ...

    Java并发包之CountDownLatch用法.docx

    下面是一个模拟乘客登机的`CountDownLatch`使用示例: ```java public class CountDownLatchTest { public static void main(String[] args) throws InterruptedException { System.out.println("南京禄口机场_...

    CountDownLatch 和 CyclicBarrier 的运用(含AQS详解)

    ### CountDownLatch 和 CyclicBarrier 的运用(含AQS详解) #### CountDownLatch **定义与特点:** CountDownLatch 是 Java 并发包中的一个重要组件,它主要用于解决“一个或多个线程等待其他线程完成任务”的问题。...

    Java中CountDownLatch用法解析

    在给出的代码示例中,`CountDownLatchDemo`类创建了两个`CountDownLatch`实例:`begin`和`end`。`begin`计数器的初始值为1,代表比赛开始的信号;`end`计数器的初始值为5,对应5位参赛运动员。在主方法中,首先创建...

    CountDownLatch同步工具类使用详解

    CountDownLatch的使用示例: ```java public class Test { public static void main(String[] args) { CountDownLatch begin = new CountDownLatch(1); CountDownLatch end = new CountDownLatch(2); for(int ...

    SpringBoot CountDownLatch多任务并行处理的实现方法

    在我们的示例中,我们使用 CountDownLatch 来等待五个任务的完成。 首先,我们创建了一个 CountDownLatch 对象,并将其初始化为 5,这意味着我们需要等待五个任务的完成。然后,我们创建了五个任务,每个任务都是一...

    java使用CountDownLatch等待多线程全部执行完成

    例如,在上面的示例代码中,我们创建了 10 个线程,每个线程累加 10000 次,然后调用 countDown 方法,最后在主线程中调用 await 方法等待所有线程完成。 CountDownLatch 的 await 方法还支持超时时间的设置,当...

    并发编程之Tools&CountDownLatch&Semaphore原理与应用1

    在示例代码中,SemaphoreSample展示了Semaphore的实际应用。创建一个拥有2个许可的Semaphore,然后启动5个线程。每个线程试图获取许可,执行任务(这里仅仅是打印时间和睡眠),然后释放许可。输出结果显示每次只有...

Global site tag (gtag.js) - Google Analytics