CountDownLatch同步工具类

原创 2012年03月25日 21:44:52
//CountDownLatch同步工具类
//犹如倒计时计数器,调用CountDownLatch对象的countDown方法就将计数器减1,
//当计数到达0时,则所有等待者或单个等待者开始执行。这直接通过代码来说明CountDownLatch的作用,
//这样学员的理解效果更直接。
//可以实现一个人(也可以是多个人)等待其他所有人都来通知他,
//这犹如一个计划需要多个领导都签字后才能继续向下实施。还可以实现一个人通知多个人的效果,
//类似裁判一声口令,运动员同时开始奔跑。用这个功能做百米赛跑的游戏程序不错哦!

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

	}
}
运行结果:
线程pool-1-thread-1正准备接受命令
线程pool-1-thread-3正准备接受命令
线程pool-1-thread-2正准备接受命令
线程main即将发布命令
线程main已发送命令,正在等待结果
线程pool-1-thread-1已接受命令
线程pool-1-thread-3已接受命令
线程pool-1-thread-2已接受命令
线程pool-1-thread-3回应命令处理结果
线程pool-1-thread-2回应命令处理结果
线程pool-1-thread-1回应命令处理结果
线程main已收到所有响应结果

Java并发编程-同步辅助类之CountDownLatch

CountDownLatch是Java Concurrent包下提供的同步辅助类。在完成一组正在其他线程中执行的操作之前,它允许线程一直等待。和Semaphore类似,它使用一个整数进行初始化,Sem...
  • chenchaofuck1
  • chenchaofuck1
  • 2016年06月06日 17:03
  • 1287

Java中使用CountDownLatch进行多线程同步

CountDownLatch介绍在前面的Java学习笔记中,总结了Java中进行多线程同步的几个方法:1、synchronized关键字进行同步。2、Lock锁接口及其实现类ReentrantLock...
  • zbc1090549839
  • zbc1090549839
  • 2016年12月05日 14:37
  • 931

通过CountDownLatch实现websocket同步返回

// 使用的jar包:  https://github.com/TooTallNate/Java-WebSocket // 主要的类 import java.net.URI; import java....
  • lijunwyf
  • lijunwyf
  • 2015年06月15日 19:16
  • 1499

[笔记][Java7并发编程实战手册]3.4 等待多个并发事件的完成CountDownLatch倒计数闭锁

[笔记][Java7并发编程实战手册]系列目录简介本文学习CountDownLatch 倒计时闭锁。 本人英文不好,靠机器翻译,然后有一段很形象的描述,让我把它叫为倒计时 用给定的计数 初始化 ...
  • mr_zhuqiang
  • mr_zhuqiang
  • 2015年08月19日 21:50
  • 774

【JAVA】java中CountDownLatch的用法,实例讲解

CountDownLatch主要用于多线程环境中,当所有的线程都countDown了,就会释放所有的等待的线程,await在到0之前一直等待。 直接看一段代码: package thread.th...
  • chiweitree
  • chiweitree
  • 2015年07月30日 15:24
  • 1161

Java线程池及CountDownLatch的使用

Java多线程除了可以直接使用Thread和Runnable来实现外,jdk5以后提供了一种更方便的使用方式:线程池(Executors),本章暂不介绍什么是线程池,以及线程池的分类和使用。主要介绍线...
  • wyc_cs
  • wyc_cs
  • 2016年07月25日 12:43
  • 1381

CountDownLatch的介绍和使用

1、类介绍 java.util.concurrent 类 CountDownLatch java.lang.Object java.util.concurrent.CountDownL...
  • z69183787
  • z69183787
  • 2015年10月23日 11:56
  • 1110

深入学习理解java:CountDownLatch详解

今天在公司学习看到了它,翻一番文档,正如每个Java文档所描述的那样,CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。在Java并发中,c...
  • baidu_23086307
  • baidu_23086307
  • 2016年11月12日 15:33
  • 857

Java并发编程之——CountDownLatch的使用

最近在开发Android项目的时候有一个需求:在Service中开启多个线程并发的执行任务,当这三个线程执行完毕之后,主线程才能继续往下执行。刚开始使用的是AsyncTask+AtomicIntege...
  • liuyi1207164339
  • liuyi1207164339
  • 2016年06月06日 18:54
  • 1898

Android 价值千万java多线程同步 <五>CountDownLatch(计数器)和Semaphore(信号量)

Semaphore Semaphore是一个计数信号量,它的本质是一个"共享锁",以控制某个资源可被同时访问的个数,提供同步机制 信号量维护了一个信号量许可集。线程可以通过调用acquire...
  • WHB20081815
  • WHB20081815
  • 2017年03月30日 20:49
  • 436
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CountDownLatch同步工具类
举报原因:
原因补充:

(最多只允许输入30个字)