`

CountDownLatch 闭锁演示

阅读更多
import java.util.concurrent.CountDownLatch;

/**
 * CountDownLatch 闭锁演示
 * 闭锁的作用相当于一扇门:在闭锁到达结束状态(getCount()=0)前,这扇门一直是关闭的,并且没有任何线程能通过。
 * 当到达结束状态时,这扇门会打开并允许所有的线程通过(可以继续执行await()之后的代码)。
 * 当闭锁到达结束状态后,将不会再改变状态,因此这扇门将永远保持打开状态。
 * **/
public class TestHarness {
	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 thread = new Thread(){
				public void run(){
					try {
						System.out.println("Before:S="+startGate.getCount()+"	E="+endGate.getCount());
						startGate.await();//使当前线程在锁存器倒计数至零之前一直等待,除非线程被中断。
						System.out.println("After:S="+startGate.getCount()+"	E="+endGate.getCount());
						try {
							System.out.println("task run!");
							task.run();
						} finally{
							System.out.println("End Gate countDown()");
							endGate.countDown();
						}
					} catch (InterruptedException e) {}
				}
			};
			thread.start();
		}
		long start = System.nanoTime();//返回最准确的可用系统计时器的当前值,以毫微秒为单位。
		System.out.println("开启启动门!");
		startGate.countDown();//递减锁存器的计数,如果计数到达零,则释放所有等待的线程。
		endGate.await();//使当前线程在锁存器倒计数至零之前一直等待,除非线程被中断。
		System.out.println("End Gate await()");
		long end = System.nanoTime();
		return end-start;
	} 
	public static void main(String[] args) {
		MyThread thread=new MyThread("线程A");
		TestHarness testHarness = new TestHarness();
		try {
			long time = testHarness.timeTasks(10, thread);
			System.out.println("It's cost time:"+time);
		} catch (Exception e) {
			System.out.println("Exception Accured!");
		}
	}
}
分享到:
评论

相关推荐

    mybaits 多线程 实现数据批量插入 (运用CountDownLatch实现闭锁)

    本文将详细介绍如何利用MyBatis结合多线程和CountDownLatch闭锁来实现数据的批量插入。 首先,我们来看`mybatis批处理`。MyBatis的批处理功能允许我们在一次数据库连接中执行多条SQL语句,从而减少了数据库连接的...

    多线程countDownLatch方法介绍

    在Java多线程编程中,CountDownLatch是一个非常重要的同步工具类,它可以帮助我们协调多个线程之间的交互。本文将深入探讨CountDownLatch的工作原理、使用场景以及相关源码分析。 CountDownLatch是一个计数器,初始...

    CountDownLatch和CyclicBarrier用法实例大全

    在Java并发编程中,CountDownLatch和CyclicBarrier是两种非常重要的同步工具类,它们用于协调多个线程间的协作。这两个工具都是在`java.util.concurrent`包下,是Java并发库的重要组成部分。 **CountDownLatch** ...

    利用 CountDownLatch 类实现线程同步

    Java 提供了多种工具来实现这样的同步机制,其中之一便是 `CountDownLatch` 类。`CountDownLatch` 是一个计数器,可以用于协调多个线程间的活动,等待所有线程完成各自的任务后,主线程或其他线程才能继续执行。 ...

    CountDownLatch学习用法

    CountDownLatch是Java并发编程中一个重要的工具类,它属于java.util.concurrent包下的一个同步辅助类。这个类的设计目的是允许一个线程等待其他多个线程完成操作,然后再继续执行。CountDownLatch通常用于多线程协作...

    CountDownLatch练习

    CountDownLatch是Java并发编程中一个重要的同步工具类,它允许一个或多个线程等待其他线程完成操作。这个工具在多线程环境下的并行处理和协调中扮演着关键角色。 **CountDownLatch是什么?** CountDownLatch是一个...

    并发编程之CountDownLatch

    主线程必须在启动其他线程后立即调用 CountDownLatch.await()方法,其他 N 个线程必须引用闭锁对象,因为他们需要通知 CountDownLatch 对象,他们已经完成了各自的任务。 在实际开发中,CountDownLatch 可以用来...

    java并发编程中CountDownLatch和CyclicBarrier的使用借鉴.pdf

    java并发编程中CountDownLatch和CyclicBarrier的使用借鉴 java并发编程中CountDownLatch和CyclicBarrier是两个非常重要的线程控制和调度工具,经常被用于解决多线程程序设计中的线程等待问题。本文将对...

    CountDownLatch的使用

    递减锁存器CountDownLatch的使用以及注意事项!

    CountDownLatch与thread.join()的区别

    CountDownLatch与thread.join()的区别

    CountDownLatch Demo

    CountDownLatch 是 Java 多线程并发编程中一个重要的同步工具类,主要用来协调多个线程间的协作,确保某个任务在所有线程完成之前不会开始。在这个"CountDownLatch Demo"中,我们将深入理解 CountDownLatch 的原理、...

    CountDownLatch详解.docx

    CountDownLatch 是 Java 中的一个同步工具类,位于 `java.util.concurrent` 包下,它主要用于多线程间的协作,尤其在需要等待所有线程执行完指定任务后才能继续执行的情况。这个类通过一个计数器(计数down)来实现...

    countdownlatch-example-sourcecode.zip

    《CountDownLatch实战解析与源码探索》 CountDownLatch是Java并发编程中一个非常重要的同步工具类,它在多线程协作场景中起到了关键的作用。在`countdownlatch-example-sourcecode.zip`这个压缩包中,我们可以看到...

    尚硅谷Java视频_JUC 视频教程

    尚硅谷_JUC线程高级_CountDownLatch 闭锁 ·6. 实现 Callable 接口 ·7. 尚硅谷_JUC线程高级_同步锁 Lock ·8. 尚硅谷_JUC线程高级_生产者消费者案例-虚假唤醒 ·9. 尚硅谷_JUC线程高级_Condition 线程通信 ·10. ...

    Java中的CountDownLatch与CyclicBarrier:深入理解与应用实践

    在Java的并发编程中,CountDownLatch和CyclicBarrier是两个非常重要的同步工具,它们用于协调多个线程的执行顺序。本文将详细介绍CountDownLatch和CyclicBarrier的工作原理、使用场景以及如何在实际项目中应用它们。...

    JAVA多线程CountDownLatch使用详解

    JAVA多线程CountDownLatch使用详解 JAVA多线程CountDownLatch是JAVA多线程编程中的一种同步工具,主要用来让某个线程等待其他线程执行完毕后再继续执行。下面我们将详细介绍JAVA多线程CountDownLatch的使用和原理。...

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

    当计数器值为 0 时,说明所有的工作线程都执行完了,此时,在闭锁上等待的主线程就可以恢复执行任务。 应用场景:倒数计时器,例如火箭发射前检查设备、仪器的场景。 Semaphore Semaphore 是一个限流工具类,用于...

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

    Java中CountDownLatch进行多线程同步详解及实例代码 CountDownLatch是Java中的一种多线程同步辅助类,主要用来同步多个任务的执行。它允许一个或多个线程等待,直到一组正在其他线程中执行的操作完成。下面是对...

    Java中CountDownLatch用法解析

    在Java并发编程中,`CountDownLatch`是一个非常重要的工具类,它位于`java.util.concurrent`包下,用于协调多个线程间的同步。`CountDownLatch`的主要作用是允许一个或多个线程等待其他线程完成操作。在上述例子中,...

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

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

Global site tag (gtag.js) - Google Analytics