import java.util.concurrent.CountDownLatch;
/**
* 案例:一台机器启动后,有5个人的工人同时在这台机器上进行操作,5个工人有的效率高有的效率低,
* 当这5个工人操作完毕时,关闭机器。
*
* @author Administrator
*
*/
public class TestCountDownLatchDriverWorker {
/**
* @param args
* @throws InterruptedException
*/
public static void main(String[] args) throws InterruptedException {
// 创建1个驱动器的倒数计数器
CountDownLatch driverStartLatch = new CountDownLatch(1);
// 创建5个工人倒数计数器
CountDownLatch workerDoneLath = new CountDownLatch(5);
for (int i = 1; i <= 5; i++) {
Thread worker = new Thread(new Worker(driverStartLatch,
workerDoneLath, i));
worker.start();
}
driverStartup();
// 使驱动器倒数计数为0,让worker线程继续执行其他代码。
driverStartLatch.countDown();
workerDoneLath.await();// 等待工人做完事情。
driverShoutDown();
}
public static void driverStartup() {
System.out.println("Driver start up and running.");
}
public static void driverShoutDown() {
System.out.println("Driver shout down.");
}
static class Worker implements Runnable {
// 驱动启动时开关
private CountDownLatch driverStartLatch;
// 工人做完事的开关
private CountDownLatch workerDoneLath;
private int id;
public Worker(CountDownLatch driverStartLatch,
CountDownLatch workerDoneLath, int id) {
this.driverStartLatch = driverStartLatch;
this.id = id;
this.workerDoneLath = workerDoneLath;
}
@Override
public void run() {
try {
// 等待驱动启动。
driverStartLatch.await();
// 驱动器启动后继续执行以下语句
Thread.sleep((long) (Math.max(1000, Math.random() * 5000)));
System.out.println("Worker " + id + " has done his work.");
// 工人完事情计数,
workerDoneLath.countDown();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
d
分享到:
相关推荐
1. java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...
java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...
Java.util.concurrent是Java 5.0引入的一个重要包,它为多线程编程提供了一组高级并发工具。这个包的设计者是Doug Lea,它的出现是JSR-166的一部分,也被称作Tiger更新。Java.util.concurrent的引入是为了解决传统...
Java平台在J2SE 1.5版本中引入了`java.util.concurrent`包,这是一系列中等层次的并发支持类集合,通过Java社区过程(Java Community Process, JCP)的Java规范请求(Java Specification Request, JSR)166创建而成...
`java.util.concurrent`包是Java提供的一个强大的多线程工具库,其中包含了许多类和接口,如`CountDownLatch`和`CyclicBarrier`,它们为程序员提供了更高级别的同步和协调机制。这篇文档将详细解析这两个工具类的...
本资源包含两个 pdf 文档,一本根据 Jakob Jenkov 最新博客 (http://tutorials.jenkov.com/java-util-concurrent/index.html) 整理的 java_util_concurrent_user_guide_en.pdf,一个中文翻译的 java_util_concurrent...
关于AbstractQueuedSynchronizer,它是java.util.concurrent包中并发控制的核心组件,为Java并发工具类提供了底层机制支持,例如ReentrantLock、Semaphore、CountDownLatch等,都依赖于这个框架来实现同步。...
java.util.concurrent.CountDownLatch通过org.redisson.core.RTopic 实现分布式订阅/发布通过 org.redisson.core.RHyperLogLog 实现分布式HyperLogLog 线程安全支持 OSGi超过110个单元测试 标签:Redisson...
### Java.util.concurrent_您不知道的5件事 #### 1. Semaphore(信号量) - **定义与作用**:`Semaphore` 类是一种控制多个线程访问共享资源的机制,它通过内部维护一个整数计数器(许可的数量)以及一组等待线程...
Java并发工具包(java.util.concurrent)是Java平台上用于高效、安全地处理多线程编程的重要组件。这个包包含了丰富的并发工具类,旨在帮助开发者构建高度并发的程序,提高程序的性能和可伸缩性。本资源是该工具包的...
Java.util.concurrent(JUC)是Java平台中的一个核心包,专门用于处理多线程并发问题。这个包包含了大量的工具类和接口,极大地简化了并发编程的复杂性,提高了程序的性能和可伸缩性。本测试源文件主要是针对JUC并发...
《Java Util Concurrent中文版》是Java并发编程领域的重要参考资料,主要涵盖了Java标准库中的`java.util.concurrent`包及其相关类和接口。这个包是Java多线程编程的核心,提供了高效、安全的并发工具,帮助开发者...
总之,`java.util.concurrent` 提供的工具使得并发编程变得更加容易和高效,是 Java 并发编程的基石,无论是对于初学者还是经验丰富的开发者,理解和掌握这个包都是非常重要的。通过熟练运用这些工具,开发者可以...
Java.util.concurrent包(虽然不是直接在Java.util下,但密切相关)包含了一系列线程安全的数据结构和并发工具,如Semaphore、ExecutorService、CountDownLatch等,极大地简化了多线程编程。 8. **枚举Set**: ...
在Java编程领域,`java.util.concurrent`包是并发编程的核心工具包,提供了高效、线程安全的类和接口,使得开发者能够更容易地处理多线程环境。本篇将深入探讨这个包中一些鲜为人知的知识点,以帮助你提升并发编程的...
Java的`java.util.concurrent`包提供了丰富的线程工具,如`ExecutorService`、`Semaphore`、`CountDownLatch`等,帮助开发者高效地管理和控制并发。 以上各个模块的知识点相互独立,但又经常协同工作,共同构成了...
6. **管程(Java 5后引入的`java.util.concurrent`包)**:如`java.util.concurrent.locks.Condition`和`java.util.concurrent.CountDownLatch`等,用于协调线程间的协作。 7. **ExecutorService和Future**:`java....
- `java.util.concurrent.CyclicBarrier`和`java.util.concurrent.CountDownLatch`用于协调一组线程。 #### 七、并发协作模型 ##### 1. 生产者消费者模型 - 通过队列实现生产者和消费者之间的解耦。 ##### 2. ...
2. **使用`java.util.concurrent.CountDownLatch`实现倒计时** `CountDownLatch`是一个同步辅助类,它允许一个或多个线程等待其他线程完成操作。在倒计时场景中,我们可以设置一个计数器,每过一秒就减少计数器的...