`

CountDownLatch经典模拟

阅读更多

 

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class CountDownLatchTest {

	// 模拟了100米赛跑,10名选手已经准备就绪,只等裁判一声令下。当所有人都到达终点时,比赛结束。
	public static void main(String[] args) throws InterruptedException {

		// 开始的倒数锁
		final CountDownLatch begin = new CountDownLatch(1);

		// 结束的倒数锁
		final CountDownLatch end = new CountDownLatch(10);

		// 十名选手
		final ExecutorService exec = Executors.newFixedThreadPool(10);

		for (int index = 0; index < 10; index++) {
			final int NO = index + 1;
			Runnable run = new Runnable() {
				public void run() {
					try {
						// 如果当前计数为零,则此方法立即返回。
						// 等待
						begin.await();
						Thread.sleep((long) (Math.random() * 10000));
						System.out.println("No." + NO + " arrived");
					} catch (InterruptedException e) {
					} finally {
						// 每个选手到达终点时,end就减一
						end.countDown();
					}
				}
			};
			exec.submit(run);
		}
		System.out.println("Game Start");
		// begin减一,开始游戏
		begin.countDown();
		// 等待end变为0,即所有选手到达终点
		end.await();
		System.out.println("Game Over");
		exec.shutdown();
	}
}
分享到:
评论

相关推荐

    利用 CountDownLatch 类实现线程同步

    2. **并发测试**:在测试中,可以创建多个线程模拟并发执行,然后使用 `CountDownLatch` 让测试代码等待所有并发操作完成,确保测试结果的正确性。 3. **框架设计**:在自定义框架或库中,如果有多个组件或服务需要...

    java并发编程中CountDownLatch和CyclicBarrier的使用借鉴.pdf

    在上面的例子中, CountDownLatch被用来模拟百米赛跑的场景,其中八名运动员同时起跑,由于速度的快慢,肯定会出现先到终点和晚到终点的情况,而终点有个统计成绩的仪器,当所有选手到达终点时,它会统计所有人的...

    countdownlatch-example-sourcecode.zip

    例如,模拟一个团队赛跑场景,所有队员出发后,裁判(主线程)等待所有队员到达终点(调用`countDown()`),队员全部到达后,裁判宣布比赛结束(`await()`返回)。 5. **CountDownLatch的应用场景** - 多线程协同...

    Java并发包之CountDownLatch用法.docx

    下面是一个模拟乘客登机的`CountDownLatch`使用示例: ```java public class CountDownLatchTest { public static void main(String[] args) throws InterruptedException { System.out.println("南京禄口机场_...

    Java中CountDownLatch用法解析

    在Java并发编程中,`CountDownLatch`是一个非常重要的工具类,它位于`java.util.concurrent`包下,用于协调多个线程间的同步。`CountDownLatch`的主要作用是允许一个或多个线程等待其他线程完成操作。在上述例子中,...

    27 倒数计时开始,三、二、一—CountDownLatch详解.pdf

    // 模拟球员到位 for (int i = 0; i ; i++) { new Thread(() -&gt; { System.out.println("球员" + i + "到位!"); countDownLatch.countDown(); }).start(); } countDownLatch.await(); // 控球后卫等待所有...

    SpringBoot CountDownLatch多任务并行处理的实现方法

    SpringBoot CountDownLatch 多任务并行处理的实现方法 本篇文章主要介绍了 SpringBoot 中使用 ...在我们的示例中,我们使用五个任务来模拟统计功能点的计算,但是使用 CountDownLatch 可以轻松地扩展到更多的任务。

    Java操作系统课设之模拟进程管理系统

    在模拟中,可以使用这些工具来实现如管程、信号量、PV操作等经典同步原语。 4. **进程通信**:进程间通信(IPC)是操作系统中重要的组成部分。Java提供了多种通信方式,如管道(Pipes)、套接字(Sockets)、共享...

    CSMACD模拟

    - **性能优化**:为提高性能,可以使用并发工具如`CountDownLatch`或`CyclicBarrier`来协调线程,或者使用`ExecutorService`来管理和控制线程池。 通过这样的模拟,开发者可以更好地理解CSMA/CD的工作原理,并且...

    Java 模拟线程并发

    最后,Java并发库还包含了很多其他有用的工具,如Semaphore(信号量)用于控制同时访问特定资源的线程数量,CyclicBarrier(循环屏障)和CountDownLatch(计数器门锁)用于多线程间的协作,以及Lock接口及其实现如...

    高并发场景模拟测试

    通过CountDownLatch对高并发场景模拟测试,基于AQS同步队列实现,先阻塞,等待所有线程达到并发执行的效果。

    模拟公交车运行-java

    Java提供了多种机制来实现这一点,如synchronized关键字、wait()、notify()和notifyAll()方法,以及更高级的并发工具类,如Semaphore(信号量)、CyclicBarrier(循环屏障)和CountDownLatch(倒计时锁)。在模拟公交车...

    模拟面试 Java 模拟面试 Java

    面试中可能会讨论线程的创建(通过Thread类或实现Runnable接口)、线程同步(synchronized关键字、wait()、notify()、notifyAll()方法、Lock接口和Condition对象)以及并发工具类(如Semaphore、CountDownLatch、...

    java 模拟快车下载器

    Java模拟快车下载器是一种利用Java编程语言实现的下载工具,它可以模拟流行的网络下载软件——快车的功能。在本文中,我们将深入探讨如何利用Java来实现这样的下载器,包括新建下载任务、暂停、继续下载以及多线程...

    java线程并发countdownlatch类使用示例

    在`run()`方法中,模拟了组件初始化的过程,然后调用`latch.countDown()`来将计数器减1。 在`startServer()`方法中,首先打印出"Server is starting.",然后创建了一个`CountDownLatch`实例,其门限值设置为3,表示...

    Java线程并发工具类CountDownLatch原理及用法

    CyclicBarrier主要用在多线程协作场景,例如,多个线程进行棋盘游戏的AI模拟,所有玩家必须等待所有玩家准备完毕才能开始游戏。CyclicBarrier有以下关键方法: - `await()`:使当前线程等待,直到所有线程到达屏障...

    你会用Java代码模拟高并发吗

    本文将介绍如何使用 Java 代码模拟高并发,通过示例代码详细讲解了使用 Semaphore 和 CountDownLatch 两个类来模拟高并发的效果。 Semaphore Semaphore 是一种基于计数的信号量,可以设定一个阈值,基于此,多个...

    java并发编程专题(八)----(JUC)实例讲解CountDownLatch

    下面是一个使用CountDownLatch的实例,模拟了运动员比赛的场景: public class TestCountDownLatch { private static final int RUNNER_NUMBER = 5; // 运动员个数 private static final Random RANDOM = new ...

    java多线程模拟时钟显示

    7. **并发工具类**:Java 5引入了`java.util.concurrent`包,包含如`CountDownLatch`、`CyclicBarrier`和`Semaphore`等并发工具,可以帮助更好地控制线程的启动和结束,但在模拟时钟这个简单场景中可能用不上。...

    基于软件互斥算法的临界区进程互斥的模拟实现

    本实验通过模拟实现四种经典的进程互斥算法,包括Dekker算法、Lamport算法、Peterson算法和Eisenberg算法,旨在让学生深入理解这些算法的原理及其在Java中的实现。 Dekker算法是最早提出的解决临界区问题的方法之一...

Global site tag (gtag.js) - Google Analytics