`
conkeyn
  • 浏览: 1525088 次
  • 性别: 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.util.concurrent 学习ppt

    Java.util.concurrent是Java 5.0引入的一个重要包,它为多线程编程提供了一组高级并发工具。这个包的设计者是Doug Lea,它的出现是JSR-166的一部分,也被称作Tiger更新。Java.util.concurrent的引入是为了解决传统...

    The java.util.concurrent Synchronizer Framework

    Java平台在J2SE 1.5版本中引入了`java.util.concurrent`包,这是一系列中等层次的并发支持类集合,通过Java社区过程(Java Community Process, JCP)的Java规范请求(Java Specification Request, JSR)166创建而成...

    java多线程学习-java.util.concurrent详解(一) Latch/Barrier

    `java.util.concurrent`包是Java提供的一个强大的多线程工具库,其中包含了许多类和接口,如`CountDownLatch`和`CyclicBarrier`,它们为程序员提供了更高级别的同步和协调机制。这篇文档将详细解析这两个工具类的...

    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...

    The java.util.concurrent synchronizer framework.pdf

    关于AbstractQueuedSynchronizer,它是java.util.concurrent包中并发控制的核心组件,为Java并发工具类提供了底层机制支持,例如ReentrantLock、Semaphore、CountDownLatch等,都依赖于这个框架来实现同步。...

    Redis客户端Redisson.zip

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

    java.util.concurrent_您不知道的5件事

    ### Java.util.concurrent_您不知道的5件事 #### 1. Semaphore(信号量) - **定义与作用**:`Semaphore` 类是一种控制多个线程访问共享资源的机制,它通过内部维护一个整数计数器(许可的数量)以及一组等待线程...

    java并发工具包 java.util.concurrent中文版-带书签版

    Java并发工具包(java.util.concurrent)是Java平台上用于高效、安全地处理多线程编程的重要组件。这个包包含了丰富的并发工具类,旨在帮助开发者构建高度并发的程序,提高程序的性能和可伸缩性。本资源是该工具包的...

    java.util.concurrent 测试源文件

    Java.util.concurrent(JUC)是Java平台中的一个核心包,专门用于处理多线程并发问题。这个包包含了大量的工具类和接口,极大地简化了并发编程的复杂性,提高了程序的性能和可伸缩性。本测试源文件主要是针对JUC并发...

    java_util_concurrent中文版pdf

    《Java Util Concurrent中文版》是Java并发编程领域的重要参考资料,主要涵盖了Java标准库中的`java.util.concurrent`包及其相关类和接口。这个包是Java多线程编程的核心,提供了高效、安全的并发工具,帮助开发者...

    java.util.concurrent介绍(重要).pdf

    总之,`java.util.concurrent` 提供的工具使得并发编程变得更加容易和高效,是 Java 并发编程的基石,无论是对于初学者还是经验丰富的开发者,理解和掌握这个包都是非常重要的。通过熟练运用这些工具,开发者可以...

    JBuider第七章:Java.util包.rar

    Java.util.concurrent包(虽然不是直接在Java.util下,但密切相关)包含了一系列线程安全的数据结构和并发工具,如Semaphore、ExecutorService、CountDownLatch等,极大地简化了多线程编程。 8. **枚举Set**: ...

    关于 java.util.concurrent 您不知道的 5 件事,第 2 部分

    在Java编程领域,`java.util.concurrent`包是并发编程的核心工具包,提供了高效、线程安全的类和接口,使得开发者能够更容易地处理多线程环境。本篇将深入探讨这个包中一些鲜为人知的知识点,以帮助你提升并发编程的...

    java-util大全.rar

    Java的`java.util.concurrent`包提供了丰富的线程工具,如`ExecutorService`、`Semaphore`、`CountDownLatch`等,帮助开发者高效地管理和控制并发。 以上各个模块的知识点相互独立,但又经常协同工作,共同构成了...

    工作在同一个java虚拟机中的线程能实现消息互发(alpha)

    6. **管程(Java 5后引入的`java.util.concurrent`包)**:如`java.util.concurrent.locks.Condition`和`java.util.concurrent.CountDownLatch`等,用于协调线程间的协作。 7. **ExecutorService和Future**:`java....

    java多线程编程总结

    - `java.util.concurrent.CyclicBarrier`和`java.util.concurrent.CountDownLatch`用于协调一组线程。 #### 七、并发协作模型 ##### 1. 生产者消费者模型 - 通过队列实现生产者和消费者之间的解耦。 ##### 2. ...

    倒计时代码 JAVA

    2. **使用`java.util.concurrent.CountDownLatch`实现倒计时** `CountDownLatch`是一个同步辅助类,它允许一个或多个线程等待其他线程完成操作。在倒计时场景中,我们可以设置一个计数器,每过一秒就减少计数器的...

Global site tag (gtag.js) - Google Analytics