`

同步器--CountDownLatch

    博客分类:
  • J2SE
阅读更多

CountDownLatch像倒计时计数器,调用它的countDown()方法就将计数器减1,当达到0时,所有等待者开始执行,

可以实现一个人通知多人,如裁判,也可以实现一个计划要多个领导签字后才能继续向下实施的情况.

public class CountdownLatchTest {
	public static void main(String[] args) {
		ExecutorService service = Executors.newCachedThreadPool();
		final CountDownLatch cdOrder = new CountDownLatch(1);
		final CountDownLatch cdAnswer = new CountDownLatch(3);
		
		for(int i=0;i<3;i++){
			Runnable runnable = new Runnable(){
					public void run(){
					try {
						System.out.println("线程" + Thread.currentThread().getName() + 
								"正准备接受命令");						
						cdOrder.await();
						System.out.println("线程" + Thread.currentThread().getName() + 
						"已接受命令");								
						Thread.sleep((long)(Math.random()*10000));	
						System.out.println("线程" + Thread.currentThread().getName() + 
								"回应命令处理结果");						
						cdAnswer.countDown();						
					} catch (Exception e) {
						e.printStackTrace();
					}				
				}
			};
			service.execute(runnable);
		}		
		try {
			Thread.sleep((long)(Math.random()*10000));
		
			System.out.println("线程" + Thread.currentThread().getName() + 
					"即将发布命令");						
			cdOrder.countDown();
			System.out.println("线程" + Thread.currentThread().getName() + 
			"已发送命令,正在等待结果");	
			cdAnswer.await();
			System.out.println("线程" + Thread.currentThread().getName() + 
			"已收到所有响应结果");	
		} catch (Exception e) {
			e.printStackTrace();
		}				
		service.shutdown();

	}
}
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

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

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

    第20章 Part4 并发工具同步器.pdf

    - **同步器**:用于实现线程间的同步操作,常见的同步器包括`Semaphore`、`CountDownLatch`、`CyclicBarrier`、`Exchanger`和`Phaser`等。 - **执行器**:用于管理和控制线程的执行,如`ExecutorService`等。 - **...

    Java多线程同步器代码详解

    本文将深入解析四种主要的同步器:CountDownLatch、Semaphore、Barrier和Exchanger,并通过代码示例进行讲解。 1. **CountDownLatch** CountDownLatch是一个计数器,通常用于一次性事件,如等待所有线程完成某个...

    27 倒数计时开始,三、二、一—CountDownLatch详解.pdf

    CountDownLatch 的实现基于 `AbstractQueuedSynchronizer`(AQS)框架,这是一个内置的锁和同步器框架。AQS 内部维护了一个整型状态变量 `state`,在 CountDownLatch 中,`state` 代表计数值。`countDown()` 方法...

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

    AQS 定义了一个抽象的同步器框架,CountDownLatch 内部实现了 AQS 的 `tryAcquireShared()` 和 `tryReleaseShared()` 方法,通过这些方法来控制线程的等待和释放。 #### CyclicBarrier **定义与特点:** ...

    Java中的CountDownLatch类最全讲义

    3.2 使用CountDownLatch实现同步 主线程等待多个线程完成 4.1 场景介绍 4.2 使用CountDownLatch实现等待 CountDownLatch的其他应用场景 5.1 倒计时计时器 5.2 同时开始任务 5.3 等待多个资源就绪 CountDownLatch与...

    线程同步器CycliBarrier你都不会吗?

    线程同步器CycliBarrier是Java并发编程中一个重要的工具,它允许一组线程等待彼此到达一个共同的屏障点,然后一起继续执行。相比于CountDownLatch,CyclicBarrier具有可重用性,也就是说,一旦所有线程都到达屏障点...

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

    CountDownLatch是一个同步辅助类,允许一个或多个线程一直等待,直到其他线程完成操作。它的构造函数接收一个整数作为参数,即当前这个计数器的计数个数。 二、CountDownLatch的主要方法 1. void await():使当前...

    Java多线程编程之CountDownLatch同步工具使用实例

    在Java多线程编程中,CountDownLatch是一种常用的同步工具,用于协调多个线程之间的协作,确保它们按照特定的顺序执行或者等待所有线程完成特定任务后再继续执行。这个类是java.util.concurrent包的一部分,提供了...

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

    CountDownLatch 是一个同步的辅助类,允许一个或多个线程,等待其他一组线程完成操作,再继续执行。其原理是通过一个计数器来实现的,计数器的初始值为需要等待线程的数量。当主线程调用 CountDownLatch 的 await() ...

    CountDownLatch源码解析之await()

    AbstractQueuedSynchronizer是一个非常重要的类,在Java线程中提供了一个框架来实现阻塞锁,以及依赖FIFO等待队列的相关同步器(比如信号、事件等)。 继续看acquireSharedInterruptibly()方法的源码: public ...

    java分布式应用学习笔记05多线程下的并发同步器.pdf

    并发同步器在多线程编程中起到协调各个线程访问共享资源,确保数据一致性与程序正确性的关键作用。本篇笔记将深入探讨Java中的并发同步机制,包括核心概念、工具类以及在实际开发中的应用。 首先,我们要理解什么是...

    The java.util.concurrent synchronizer framework.pdf

    文档标题“java.util.concurrent同步器框架”和描述“Doug Lea的java.util.concurrent同步器框架”表明本文将探讨由Doug Lea所撰写的关于Java并发编程中同步器框架的内容。文档中提到了AbstractQueuedSynchronizer类...

    java编发编程:JUC综合讲解

    4. **同步器(Synchronizers)**:JUC库中的同步器主要是通过AQS(AbstractQueuedSynchronizer)来实现的。AQS是一个抽象类,为锁和同步器提供了一种通用的底层实现。它维护了一个等待队列,提供了基于FIFO的等待...

    The java.util.concurrent Synchronizer Framework

    ### Java.util.concurrent同步器框架详解 #### 概述 Java平台在J2SE 1.5版本中引入了`java.util.concurrent`包,这是一系列中等层次的并发支持类集合,通过Java社区过程(Java Community Process, JCP)的Java规范...

    Java 多线程与并发(10-26)-JUC锁- 锁核心类AQS详解.pdf

    它是实现Java并发包中锁和其他同步器的基础框架,例如ReentrantLock(可重入锁)、Semaphore(信号量)、CountDownLatch(倒计时门闩)、CyclicBarrier(循环栅栏)以及ReentrantReadWriteLock(可重入读写锁)等。...

    浅谈java并发之计数器CountDownLatch

    AQS是一个用于构建锁和同步器的框架,提供了线程之间的同步和队列管理。Sync类中的构造函数接收一个初始计数值,并将其设置为AQS的状态(getState() 和 setState() 方法)。tryAcquireShared() 和 tryReleaseShared...

    Java后端体系高级面试题

    - 同步机制:synchronized关键字,volatile变量 - 线程池:ExecutorService,ThreadPoolExecutor,ScheduledThreadPoolExecutor - 死锁、活锁、饥饿状态的理解与避免 4. **JVM**: - 堆内存与栈内存的结构 - ...

    Java多线程运算集合

    - `CyclicBarrier` 和 `CountDownLatch` 是两种常用的屏障类,用于实现线程间的同步等待。 - 这些工具可以用于确保一组线程在达到某个特定点之前等待,直到所有线程都到达该点才继续执行。 #### 十八、Java线程的...

Global site tag (gtag.js) - Google Analytics