`
空指针异常
  • 浏览: 22511 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

CountDownLatch测试

阅读更多
package com.coship.locktest;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;

public class CountDownLatchTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		/*
		 * try { new CountDownLatchTest.Driver().main(); } catch
		 * (InterruptedException e) { // TODO Auto-generated catch block
		 * e.printStackTrace(); }
		 */
		
		try {
			new CountDownLatchTest.Driver2().main(); 
			} catch (InterruptedException e) { // TODO Auto-generated         catch block
				e.printStackTrace();
			}
	}

	private static class Driver { // ...
		void main() throws InterruptedException {
			CountDownLatch startSignal = new CountDownLatch(1);
			CountDownLatch doneSignal = new CountDownLatch(5);

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

			//执行dowork()方法前处理
			doSomethingElse(); // don't let run yet
			//执行此方法后,dowork()执行
			startSignal.countDown(); // let all threads proceed
			doSomethingElse1();
			doneSignal.await(); // wait for all to finish
		}

		private void doSomethingElse() {
			System.out.println("do doSomethingElse...");
		}

		private void doSomethingElse1() {
			System.out.println("do doSomethingElse1...");
		}
	}

	static class Worker implements Runnable {
		private final CountDownLatch startSignal;
		private final CountDownLatch doneSignal;

		Worker(CountDownLatch startSignal, CountDownLatch doneSignal) {
			this.startSignal = startSignal;
			this.doneSignal = doneSignal;
		}

		public void run() {
			try {
				//所有线程等待
				startSignal.await();
				doWork();
				doneSignal.countDown();
			} catch (InterruptedException ex) {
			} // return;
		}

		void doWork() {
			System.out.println("do work...");
		}
	}

	static class Driver2 { // ...
		void main() throws InterruptedException {
		     CountDownLatch doneSignal = new CountDownLatch(5);
		     Executor e = Executors.newCachedThreadPool();
		 
		      for (int i = 0; i < 5; ++i) // create and start threads
		        e.execute(new WorkerRunnable(doneSignal, i));
		 
		      doneSignal.await();           // wait for all to finish
		      
		      System.out.println("all finished");
		    }
	}

	static class WorkerRunnable implements Runnable {
		private final CountDownLatch doneSignal;
		private final int i;

		WorkerRunnable(CountDownLatch doneSignal, int i) {
			this.doneSignal = doneSignal;
			this.i = i;
		}

		public void run() {
			doWork(i);
			doneSignal.countDown();
		}

		void doWork(int i) {
			System.out.println("do working" + i);
		}
	}
}
分享到:
评论

相关推荐

    多线程countDownLatch方法介绍

    1. 测试框架:在并发测试中,CountDownLatch可以用来确保所有测试线程都完成了其测试操作,然后统一收集结果或进行清理工作。 2. 数据库连接池:数据库连接池在初始化时可能需要创建多个连接,完成后才允许客户端...

    利用 CountDownLatch 类实现线程同步

    2. **并发测试**:在测试中,可以创建多个线程模拟并发执行,然后使用 `CountDownLatch` 让测试代码等待所有并发操作完成,确保测试结果的正确性。 3. **框架设计**:在自定义框架或库中,如果有多个组件或服务需要...

    CountDownLatch练习

    - **测试框架**: 测试类可能需要等待所有测试线程完成后再进行结果汇总。 - **数据加载**: 在所有数据加载线程完成加载后,应用程序可以开始提供服务。 - **并发竞赛条件**: 控制并发线程的数量,防止过多线程同时...

    CountDownLatch Demo

    通常,测试代码会创建一个 CountDownLatch 对象,然后在线程中执行任务并调用 `countDown()`,最后在主线程中调用 `await()` 等待所有线程执行完毕。通过阅读和分析这个示例,我们可以更好地理解 CountDownLatch 的...

    countdownlatch-example-sourcecode.zip

    - 测试框架:在测试中,启动多个测试线程,确保所有测试执行完毕后再进行结果汇总。 - 数据库连接池:初始化时,等待所有数据库连接准备好后再提供服务。 6. **源码解析** CountDownLatch的实现基于`java.util....

    CountDownLatch详解.docx

    总的来说,CountDownLatch 是一个强大的同步工具,适用于需要等待一组线程完成后再继续执行的情况,如初始化服务、测试框架中的多线程同步等。正确使用 CountDownLatch 可以提高程序的并发性能,避免不必要的等待,...

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

    并发编程是多线程环境下确保程序正确执行的...而CountDownLatch则用于线程间的协调,让一个线程等待其他线程完成任务,常用于启动框架服务、多线程测试等场景。熟练掌握这两种工具,能有效提升并发程序的效率和正确性。

    源码详解CountDownLatch

    这在多线程并发编程中非常有用,例如在测试中启动多个测试线程,然后等待所有测试完成后再汇总结果。 总结起来,CountDownLatch 是一个基于计数器的同步工具,它的核心在于与 AQS 的交互,通过计数器的递减和等待...

    快手2019秋招笔试试题-测试A试卷

    3. **多线程**:了解线程的概念,掌握Thread类和Runnable接口,知道同步机制(synchronized关键字,wait/notify机制,Lock接口等)以及并发工具类如ExecutorService、Semaphore、CountDownLatch等。 4. **Java测试...

    Android-Android开发人员的Kata截图.主要目标是练习UI测试

    8. **异步测试**:由于许多Android操作是异步的,因此需要处理异步回调,如使用`UiThreadTestRule`或`CountDownLatch`来确保测试顺序正确。 9. **模拟数据**:在测试中,使用Mock对象或者创建测试数据集来代替真实...

    浅谈java并发之计数器CountDownLatch

    1. 主线程等待子线程完成任务,例如在多线程测试中,主线程等待所有测试线程执行完毕再打印测试结果。 2. 多个组件初始化完成后,主线程再继续执行,确保系统的所有部分都已准备就绪。 3. 控制并发任务的并发度,...

    Java中多线程同步类 CountDownLatch

    CountDownLatch的一个常见应用场景是在测试中,比如在测试一个系统组件之前,可能需要启动多个依赖服务,确保它们都在运行后再开始测试。另一个应用是在分布式计算中,当需要等待所有参与计算的节点完成任务后,才能...

    java线程并发countdownlatch类使用示例

    在实际应用中,`CountDownLatch`常用于分布式系统、多线程协作、测试场景等,例如等待所有客户端连接完成、确保所有数据加载完毕后再开始服务等。 总结一下`CountDownLatch`的主要知识点: 1. `CountDownLatch`是...

    java测试题

    5. **多线程**:学习Thread类和Runnable接口,同步机制(如synchronized关键字、wait()、notify()和notifyAll()方法),以及并发工具类如Semaphore、CountDownLatch等。 6. **集合框架**:熟悉ArrayList、...

    一个简单的Java并发系统动态测试工具.zip

    `java.util.concurrent`包提供了许多并发工具,如CountDownLatch(计数器,用于同步多个线程),CyclicBarrier(屏障,等待所有线程到达指定点后继续执行),Semaphore(信号量,控制并发访问数量)等。 6. **死锁...

    C++、JAVA+、C+++、软件测试面试题

    4. **多线程**:线程同步机制(synchronized、Lock)、并发工具类(如Semaphore、CountDownLatch)。 5. **IO/NIO**:输入输出流的处理,NIO(New IO)的非阻塞特性。 6. **设计模式**:了解并能应用常见的设计模式...

    java并发测试

    Java提供了一系列的并发工具,如线程(Thread)、ExecutorService、Semaphore、CyclicBarrier、CountDownLatch等,这些工具可以帮助开发者创建和管理线程,以及协调线程间的协作。`MutiThreadTest.java` 可能会使用...

    threadSyncCountDownLatch:具有countDownLatch的线程同步模式

    - **测试框架**: 在测试类中,可以使用`CountDownLatch`确保测试方法在所有预设条件满足后才执行。 - **并发任务**: 当需要执行一系列并发任务,且必须在所有任务完成后进行汇总处理时,`CountDownLatch`也是很好...

    多种测试类

    JDK的`java.util.concurrent`包提供了多线程和并发工具,如`ExecutorService`和`CountDownLatch`,可以帮助开发者模拟并测试多线程场景,评估系统的并发性能。`java.lang.management`包则提供了监控和管理Java应用...

    详解Java多线程编程中CountDownLatch阻塞线程的方法

    CountDownLatch的一个典型应用场景是启动多个并发任务,然后等待所有任务完成后再进行下一步操作,例如并发测试、多线程初始化等。在并发编程中,CountDownLatch能够有效地协调线程间的交互,避免主线程过早结束或者...

Global site tag (gtag.js) - Google Analytics