- 浏览: 515639 次
- 性别:
- 来自: 武汉
文章分类
- 全部博客 (268)
- C/C++ (5)
- LUA (0)
- JVM (6)
- UML (1)
- J2SE (43)
- J2EE (15)
- EXTJS (1)
- HTML5 (47)
- ANDROID (2)
- JAVASCRIPT (51)
- WEB SERVICES (0)
- 数据库 (2)
- 数据结构 (0)
- 应用服务器 (11)
- 设计模式应用 (0)
- JAVA性能与缓存 (1)
- ByteCode (5)
- RCP (0)
- Plugin (0)
- Eclipse (3)
- 程序人生 (14)
- Mobile (2)
- Linux/Ubuntu (31)
- sublime (2)
- python (15)
- Git (5)
- NodeJs (3)
- Crosswalk (1)
- Browserify (1)
- Backbone (1)
最新评论
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(); } }
发表评论
文章已被作者锁定,不允许评论。
-
关于Thread.IsAlive属性
2015-07-04 12:12 882今天在讨论多线程的时候,谈到了这个属性。IsAlive,顾名 ... -
Java:对象的强、软、弱和虚引用
2015-02-28 11:00 731文章源自:http://zhangjunhd.blog.51 ... -
一个通用并发对象池的实现
2015-01-20 09:32 733Source: http://ifeve.com/gener ... -
如何创建不可变的Java类或对象
2015-01-07 16:29 2183在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过 ... -
并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法
2014-12-29 11:49 803文章源自:http://www.cnblogs.com/li ... -
中断线程深入
2014-12-25 15:18 795本文转自http://jiangzhengjun.itey ... -
深入java.lang.ThreadLocal类
2014-12-24 16:50 707文章源自:http://lavasoft.blog.51c ... -
Java 8新特性探究(3):解开lambda最强作用的神秘面纱
2014-07-10 17:50 710文章源自:http://developer.51cto.co ... -
Java 8特性探究(2):深入解析默认方法
2014-07-08 11:12 782文章源自:http://develop ... -
Java 8特性探究(1):通往lambda之路_语法篇
2014-07-08 09:59 690文章源自:http://developer.51cto.c ... -
java文件复制方法参考
2013-12-02 14:17 730最快的文件复制方法 private static ... -
用Java数字签名提供XML安全
2013-11-29 16:11 13134文章源自:http://www. ... -
深入理解HashMap的工作原理
2013-11-18 15:49 823HashMap的工作原理是近 ... -
JDBC4.0 驱动加载过程
2013-01-16 10:09 3634注意,jdbc4.0不再需要显示调用class.fo ... -
Java自定义的类加载器
2013-01-15 08:38 1014一、类加载器类别 * 1.java虚拟机自带的加载器 ... -
使用Log4j生成不同日志级别的日志文件
2012-12-26 17:09 5331在src根目录下存放log4j.xml文件,具体配置如下(测试 ... -
深入理解HashMap
2012-12-13 10:08 865文章摘自:http://www.iteye.c ... -
java字节码加解密
2012-06-30 09:53 1096一.创建KEY class Key { ... -
java动态代理简单实现
2012-06-30 09:45 1026一.接口 public interface Foo { ... -
线程池简单实现
2012-06-25 11:42 1097其实线程池的实现就是生产者消费者问题 的实现,理解了生产者消 ...
相关推荐
Java并发编程之同步器代码示例 ...Java并发编程之同步器代码示例展示了Java中的同步器机制,包括CountDownLatch、Semaphore、Barrier和Exchanger队列同步器等,帮助开发者更好地理解和使用Java中的并发编程技术。
- **同步器**:用于实现线程间的同步操作,常见的同步器包括`Semaphore`、`CountDownLatch`、`CyclicBarrier`、`Exchanger`和`Phaser`等。 - **执行器**:用于管理和控制线程的执行,如`ExecutorService`等。 - **...
本文将深入解析四种主要的同步器:CountDownLatch、Semaphore、Barrier和Exchanger,并通过代码示例进行讲解。 1. **CountDownLatch** CountDownLatch是一个计数器,通常用于一次性事件,如等待所有线程完成某个...
CountDownLatch 的实现基于 `AbstractQueuedSynchronizer`(AQS)框架,这是一个内置的锁和同步器框架。AQS 内部维护了一个整型状态变量 `state`,在 CountDownLatch 中,`state` 代表计数值。`countDown()` 方法...
AQS 定义了一个抽象的同步器框架,CountDownLatch 内部实现了 AQS 的 `tryAcquireShared()` 和 `tryReleaseShared()` 方法,通过这些方法来控制线程的等待和释放。 #### CyclicBarrier **定义与特点:** ...
3.2 使用CountDownLatch实现同步 主线程等待多个线程完成 4.1 场景介绍 4.2 使用CountDownLatch实现等待 CountDownLatch的其他应用场景 5.1 倒计时计时器 5.2 同时开始任务 5.3 等待多个资源就绪 CountDownLatch与...
线程同步器CycliBarrier是Java并发编程中一个重要的工具,它允许一组线程等待彼此到达一个共同的屏障点,然后一起继续执行。相比于CountDownLatch,CyclicBarrier具有可重用性,也就是说,一旦所有线程都到达屏障点...
CountDownLatch是一个同步辅助类,允许一个或多个线程一直等待,直到其他线程完成操作。它的构造函数接收一个整数作为参数,即当前这个计数器的计数个数。 二、CountDownLatch的主要方法 1. void await():使当前...
在Java多线程编程中,CountDownLatch是一种常用的同步工具,用于协调多个线程之间的协作,确保它们按照特定的顺序执行或者等待所有线程完成特定任务后再继续执行。这个类是java.util.concurrent包的一部分,提供了...
CountDownLatch 是一个同步的辅助类,允许一个或多个线程,等待其他一组线程完成操作,再继续执行。其原理是通过一个计数器来实现的,计数器的初始值为需要等待线程的数量。当主线程调用 CountDownLatch 的 await() ...
AbstractQueuedSynchronizer是一个非常重要的类,在Java线程中提供了一个框架来实现阻塞锁,以及依赖FIFO等待队列的相关同步器(比如信号、事件等)。 继续看acquireSharedInterruptibly()方法的源码: public ...
并发同步器在多线程编程中起到协调各个线程访问共享资源,确保数据一致性与程序正确性的关键作用。本篇笔记将深入探讨Java中的并发同步机制,包括核心概念、工具类以及在实际开发中的应用。 首先,我们要理解什么是...
文档标题“java.util.concurrent同步器框架”和描述“Doug Lea的java.util.concurrent同步器框架”表明本文将探讨由Doug Lea所撰写的关于Java并发编程中同步器框架的内容。文档中提到了AbstractQueuedSynchronizer类...
4. **同步器(Synchronizers)**:JUC库中的同步器主要是通过AQS(AbstractQueuedSynchronizer)来实现的。AQS是一个抽象类,为锁和同步器提供了一种通用的底层实现。它维护了一个等待队列,提供了基于FIFO的等待...
### Java.util.concurrent同步器框架详解 #### 概述 Java平台在J2SE 1.5版本中引入了`java.util.concurrent`包,这是一系列中等层次的并发支持类集合,通过Java社区过程(Java Community Process, JCP)的Java规范...
它是实现Java并发包中锁和其他同步器的基础框架,例如ReentrantLock(可重入锁)、Semaphore(信号量)、CountDownLatch(倒计时门闩)、CyclicBarrier(循环栅栏)以及ReentrantReadWriteLock(可重入读写锁)等。...
AQS是一个用于构建锁和同步器的框架,提供了线程之间的同步和队列管理。Sync类中的构造函数接收一个初始计数值,并将其设置为AQS的状态(getState() 和 setState() 方法)。tryAcquireShared() 和 tryReleaseShared...
- 同步机制:synchronized关键字,volatile变量 - 线程池:ExecutorService,ThreadPoolExecutor,ScheduledThreadPoolExecutor - 死锁、活锁、饥饿状态的理解与避免 4. **JVM**: - 堆内存与栈内存的结构 - ...
- `CyclicBarrier` 和 `CountDownLatch` 是两种常用的屏障类,用于实现线程间的同步等待。 - 这些工具可以用于确保一组线程在达到某个特定点之前等待,直到所有线程都到达该点才继续执行。 #### 十八、Java线程的...