`

并发工具类闭锁CountDownLatch练习

阅读更多
文章摘自【java并发编程实战】

1.闭锁的作用相当于一扇门:在闭锁状态到达结束状态之前,这扇门一直是关闭着的,并且没有任何线程能够通过,当到达结束状态时,这扇门会打开并允许所有的线程通过。
2.当闭锁到达结束状态,将不会再改变状态,因此这扇门将永远保持打开状态。

/**
	 * 统计所有线程执行完后所花费的时间
	 * @param nThreads 线程数
	 * @param task 任务
	 * @return 执行时间
	 * @throws InterruptedException
	 */
	public long timeTasks(int nThreads,final Runnable task) throws InterruptedException{
		final CountDownLatch startGate = new CountDownLatch(1);
		final CountDownLatch endGate = new CountDownLatch(nThreads);
		
		for(int i=0;i<nThreads;i++){
			Thread t = new Thread(){
				public void run(){
					try{
						startGate.await();
						try{
							task.run();
						}finally{
							endGate.countDown();
						}
					}catch(InterruptedException ignored){}
				}
			};
			t.start();
		}
		
		long start = System.nanoTime();
		startGate.countDown();
		endGate.await();
		long end = System.nanoTime();
		return end - start;
	}
分享到:
评论

相关推荐

    CountDownLatch、Semaphore等4大并发工具类详解

    本文将详细介绍 Java 并发工具类的四大类:CountDownLatch、Semaphore、CyclicBarrier 和 Phaser,及其应用场景和使用方法。 CountDownLatch CountDownLatch 是一个同步的辅助类,允许一个或多个线程,等待其他一...

    深入浅出_Java并发工具包原理讲解

    3. 各种并发工具类:包括闭锁(CountDownLatch)、栅栏(CyclicBarrier)、信号量(Semaphore)、读写锁(ReentrantReadWriteLock)等,这些工具类提供了丰富的线程间协调和控制的机制,使得多线程之间的合作更加...

    实例讲解Java并发编程之闭锁

    Java并发编程中的闭锁是一种同步工具类,它用于协调多个线程之间的操作顺序,确保一组操作在所有线程完成之前不会继续。闭锁的核心概念是一个内部计数器,初始值为一个正整数,表示需要等待的事件数量。当这个计数器...

    J.U.C-AQS框架同步组件之闭锁CountDownLatch介绍

    总的来说,CountDownLatch是一个非常实用的同步工具,它基于AbstractQueuedSynchronizer(AQS)框架,该框架为许多并发工具类提供了底层支持,如ReentrantLock、Semaphore等。通过使用CountDownLatch,开发者可以...

    Java并发系列之CountDownLatch源码分析

    CountDownLatch是一种非常有用的工具类,用于拦截一个或多个线程,使其在某个条件成熟后再执行。它的内部提供了一个计数器,在构造闭锁时必须指定计数器的初始值,且计数器的初始值必须大于0。另外它还提供了一个...

    并发编程实践,全面介绍基础知识、JVM同步原语、线程安全、低级并发工具、线程安全容器、高级线程协作工具、Executor部分等

    - **Java并发演进历史**:从Java 1.0的Thread类到Java 5引入的并发包`java.util.concurrent`,再到Java 7和8的改进,Java并发API不断发展,提供了更多高效、易用的并发工具。 - **Java并发模型**:Java并发模型...

    Java并发编程之闭锁与栅栏的实现

    在Java并发编程中,闭锁和栅栏是两种重要的同步工具,它们可以帮助开发者在多线程环境下控制线程的执行顺序和同步。本篇文章将详细解释这两种机制,并通过实例代码进行演示。 一、闭锁(CountDownLatch) 闭锁,由...

    并发编程笔记20190526.docx

    ### 第二章 线程的并发工具类 1. **Fork/Join框架**:用于解决大问题的分解和并行化,基于工作窃取算法,实现分而治之策略,提高计算效率。 2. **闭锁(CountDownLatch)**:一次性计数器,用于等待一组线程完成...

    Java并发编程实战

    如何提高单线程子系统的响应性,如何确保并发程序执行预期任务,如何提高并发代码的性能和可伸缩性等内容,最后介绍了一些高级主题,如显式锁、原子变量、非阻塞算法以及如何开发自定义的同步工具类。 本书适合Java...

    java并发编程三剑客

    在Java并发编程中,"三剑客"指的是三个重要的并发工具类:CountDownLatch、CyclicBarrier和Semaphore。它们都是在`java.util.concurrent`包下,主要用于协调多线程间的同步和控制。 首先,CountDownLatch是一个...

    Java并发编程(学习笔记).xmind

    同步工具类 闭锁 *应用场景 (1)确保某个计算在其需要的所有资源都被初始化后才能继续执行 (2)确保某个服务在其所依赖的所有其他服务都已经启动之后才启动 (3)等待知道某个操作...

    Java并发编程基础.pdf

    #### 五、并发工具类 - **CountDownLatch**: - 计数器闭锁,允许一个或多个线程等待其他线程完成操作。 - **CyclicBarrier**: - 循环栅栏,允许多个线程相互等待,直到到达某个公共屏障点。 - **Semaphore**: ...

    Java使用代码模拟高并发操作的示例

    `CountDownLatch`是另一种并发工具类,同样在Java 1.5引入。它是一个一次性使用的计数器,用于协调多个线程之间的同步。在开始时,计数器设置为线程的数量,每个线程完成其工作后会减少计数器的值。当计数器归零时,...

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

    TestHarnes-&gt;在计时测试中使用CountDownLatch(闭锁)来启动和停止线程 Preloader-&gt;使用FutureTask来提前加载稍后需要的数据 BoundedHashSet-&gt;使用Semaphore为容器设置边界 CellularAutomata-&gt;通过CyclicBarrier...

    深入学习Java同步机制中的底层实现

    在Java中,主要有两种同步机制:内置的`synchronized`关键字以及基于`java.util.concurrent`包中的高级同步工具类。本文将深入探讨这些机制的底层实现,特别是通过`AbstractQueuedSynchronizer`(AQS)来理解`...

    Java并发编程之栅栏(CyclicBarrier)实例介绍

    Java并发编程中的栅栏(CyclicBarrier)是一个同步辅助类,它允许一组线程等待彼此到达某个特定点,然后一起继续执行。这个特定点被称为屏障点。与闭锁(CountDownLatch)不同,闭锁通常是一次性的,而CyclicBarrier...

    Java中同步与并发用法分析

    - **闭锁(CountDownLatch)** 允许一个或多个线程等待其他线程完成操作。计数器初始化为n,调用`countDown()`方法会使计数器减一,直到计数器为0时,所有等待的线程才能继续执行。 - **FutureTask** 是一个实现了...

Global site tag (gtag.js) - Google Analytics