`
conkeyn
  • 浏览: 1505124 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

java.util.concurrent.CountDownLatch

阅读更多

 

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

 

分享到:
评论

相关推荐

    java并发工具包 java.util.concurrent中文版用户指南pdf

    1. java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...

    Java并发工具包java.util.concurrent用户指南中英文对照阅读版.pdf

    java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...

    Java并发工具包java.util.concurrent用户指南中英文对照阅读版

    本资源包含两个 pdf 文档,一本根据 Jakob Jenkov 最新博客 (http://tutorials.jenkov.com/java-util-concurrent/index.html) 整理的 java_util_concurrent_user_guide_en.pdf,一个中文翻译的 java_util_concurrent...

    Redis客户端Redisson.zip

    java.util.concurrent.CountDownLatch通过org.redisson.core.RTopic 实现分布式订阅/发布通过 org.redisson.core.RHyperLogLog 实现分布式HyperLogLog 线程安全支持 OSGi超过110个单元测试 标签:Redisson...

    尚硅谷——java.util.concurrent和工具类

    一、java.util.concurrent体系的主要大板块包含内容 二、Executors 三、Semaphor信号量 四、Exchanger线程交互 五、CyclicBarrier关卡模式 六、CountDownLatch计数器

    thread count

    import java.util.concurrent.CountDownLatch; import java.util.concurrent.Executor; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ...

    java并发工具包详解

    1. java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...

    java并发包资源

    本资源包含两个 pdf 文档,一本根据 Jakob Jenkov 最新博客 (http://tutorials.jenkov.com/java-util-concurrent/index.html) 整理的 java_util_concurrent_user_guide_en.pdf,一个中文翻译的 java_util_concurrent...

    juconcurrent: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 CountDownLatch,是一种常见同步器。其实现依赖于AQS(可以参考抽象队列式同步器AQS...import java.util.concurrent.CountDownLatch; public class Main{ //初始化构造,赋值计数器值 public s

    Java大量线程注意点

    -Xms64M -Xmx512M -Xss200K  -Xms64M:设置JVM初始内存为64M。  -Xmx512M:设置JVM大可用内存512M。... import java.util.concurrent.CountDownLatch; public class TestThread { public static void

    Java并发编程基础.pdf

    Java并发编程基础主要包括以下几个核心方面: ...并发工具类:掌握Java并发包java.util.concurrent中提供的各种工具类,如CountDownLatch、CyclicBarrier、Semaphore等,它们简化了并发编程的复杂性。

    customcode:至

    具有java.util.concurrent。*构造的自定义实现 CountDownLatch 循环屏障 换货商 重入锁 读锁 信号 线程池 BlockingQueue-生产者消费者 具有一些集合类的自定义实现 有以下示例代码 易挥发的 僵局 java.util....

    backport-util-concurrent-3.1.jar

    backport-util-concurrent-3.1.jar是一个Java库,它提供了一些并发工具类,用于简化多线程编程。这个库包含了许多实用的工具类,如`FutureTask`、`CountDownLatch`、`Semaphore`等,这些工具类可以帮助开发者更好地...

    java核心知识点整理.pdf

    25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................

    从零基础到深入理解,教你高并发(4.3G)

    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

    J.U.C-AQS框架同步组件之闭锁CountDownLatch介绍

    CountDownLatch是在java1.5被引入的,跟它一起被引入的并发工具类还有CyclicBarrier、Semaphore、ConcurrentHashMap和BlockingQueue,它们都存在于java.util.concurrent包下。CountDownLatch这个类能够使一个线程...

    JAVA核心知识点整理(有效)

    25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................

    java并发编程三剑客

    ​ 位于java.util.concurrent包下,利用它可以实现类似计数器的功能,比如有一个任务A,它要等待其他几个任务执行完毕后才能执行,这时可以使用CountDownLatch来实现这个功能 构造器以及方法 构造器 只提供了一种...

Global site tag (gtag.js) - Google Analytics