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. 具有优先级的阻塞队列 ...
本资源包含两个 pdf 文档,一本根据 Jakob Jenkov 最新博客 (http://tutorials.jenkov.com/java-util-concurrent/index.html) 整理的 java_util_concurrent_user_guide_en.pdf,一个中文翻译的 java_util_concurrent...
java.util.concurrent.CountDownLatch通过org.redisson.core.RTopic 实现分布式订阅/发布通过 org.redisson.core.RHyperLogLog 实现分布式HyperLogLog 线程安全支持 OSGi超过110个单元测试 标签:Redisson...
一、java.util.concurrent体系的主要大板块包含内容 二、Executors 三、Semaphor信号量 四、Exchanger线程交互 五、CyclicBarrier关卡模式 六、CountDownLatch计数器
import java.util.concurrent.CountDownLatch; import java.util.concurrent.Executor; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ...
1. java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...
本资源包含两个 pdf 文档,一本根据 Jakob Jenkov 最新博客 (http://tutorials.jenkov.com/java-util-concurrent/index.html) 整理的 java_util_concurrent_user_guide_en.pdf,一个中文翻译的 java_util_concurrent...
Java JUC的使用1.volatile关键字-内存可见性2.原子变量-CAS算法3.ConcurrentHashMap锁分段机制4.CountDownLatch闭锁5.实现Callable接口6.Lock同步锁7.Condition控制线程通信8.线程按序交替9.ReadWriteLock读写锁10....
源码详解CountDownLatch CountDownLatch,是一种常见同步器。其实现依赖于AQS(可以参考抽象队列式同步器AQS...import java.util.concurrent.CountDownLatch; public class Main{ //初始化构造,赋值计数器值 public s
-Xms64M -Xmx512M -Xss200K -Xms64M:设置JVM初始内存为64M。 -Xmx512M:设置JVM大可用内存512M。... import java.util.concurrent.CountDownLatch; public class TestThread { public static void
Java并发编程基础主要包括以下几个核心方面: ...并发工具类:掌握Java并发包java.util.concurrent中提供的各种工具类,如CountDownLatch、CyclicBarrier、Semaphore等,它们简化了并发编程的复杂性。
具有java.util.concurrent。*构造的自定义实现 CountDownLatch 循环屏障 换货商 重入锁 读锁 信号 线程池 BlockingQueue-生产者消费者 具有一些集合类的自定义实现 有以下示例代码 易挥发的 僵局 java.util....
backport-util-concurrent-3.1.jar是一个Java库,它提供了一些并发工具类,用于简化多线程编程。这个库包含了许多实用的工具类,如`FutureTask`、`CountDownLatch`、`Semaphore`等,这些工具类可以帮助开发者更好地...
25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................
01-并发简史.avi 02-线程和进程.avi 03-创建线程的方式(1).avi 04-线程池.avi 05-forkjoin.avi 06-JVM的内存模型.avi ...12-java.util.concurrent包下的类.avi 13-ReadWriteLock.avi 14-countDownLatch.avi
CountDownLatch是在java1.5被引入的,跟它一起被引入的并发工具类还有CyclicBarrier、Semaphore、ConcurrentHashMap和BlockingQueue,它们都存在于java.util.concurrent包下。CountDownLatch这个类能够使一个线程...
25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................
位于java.util.concurrent包下,利用它可以实现类似计数器的功能,比如有一个任务A,它要等待其他几个任务执行完毕后才能执行,这时可以使用CountDownLatch来实现这个功能 构造器以及方法 构造器 只提供了一种...