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();
}
}
分享到:
相关推荐
2. **并发测试**:在测试中,可以创建多个线程模拟并发执行,然后使用 `CountDownLatch` 让测试代码等待所有并发操作完成,确保测试结果的正确性。 3. **框架设计**:在自定义框架或库中,如果有多个组件或服务需要...
在上面的例子中, CountDownLatch被用来模拟百米赛跑的场景,其中八名运动员同时起跑,由于速度的快慢,肯定会出现先到终点和晚到终点的情况,而终点有个统计成绩的仪器,当所有选手到达终点时,它会统计所有人的...
例如,模拟一个团队赛跑场景,所有队员出发后,裁判(主线程)等待所有队员到达终点(调用`countDown()`),队员全部到达后,裁判宣布比赛结束(`await()`返回)。 5. **CountDownLatch的应用场景** - 多线程协同...
下面是一个模拟乘客登机的`CountDownLatch`使用示例: ```java public class CountDownLatchTest { public static void main(String[] args) throws InterruptedException { System.out.println("南京禄口机场_...
在Java并发编程中,`CountDownLatch`是一个非常重要的工具类,它位于`java.util.concurrent`包下,用于协调多个线程间的同步。`CountDownLatch`的主要作用是允许一个或多个线程等待其他线程完成操作。在上述例子中,...
// 模拟球员到位 for (int i = 0; i ; i++) { new Thread(() -> { System.out.println("球员" + i + "到位!"); countDownLatch.countDown(); }).start(); } countDownLatch.await(); // 控球后卫等待所有...
SpringBoot CountDownLatch 多任务并行处理的实现方法 本篇文章主要介绍了 SpringBoot 中使用 ...在我们的示例中,我们使用五个任务来模拟统计功能点的计算,但是使用 CountDownLatch 可以轻松地扩展到更多的任务。
在模拟中,可以使用这些工具来实现如管程、信号量、PV操作等经典同步原语。 4. **进程通信**:进程间通信(IPC)是操作系统中重要的组成部分。Java提供了多种通信方式,如管道(Pipes)、套接字(Sockets)、共享...
- **性能优化**:为提高性能,可以使用并发工具如`CountDownLatch`或`CyclicBarrier`来协调线程,或者使用`ExecutorService`来管理和控制线程池。 通过这样的模拟,开发者可以更好地理解CSMA/CD的工作原理,并且...
最后,Java并发库还包含了很多其他有用的工具,如Semaphore(信号量)用于控制同时访问特定资源的线程数量,CyclicBarrier(循环屏障)和CountDownLatch(计数器门锁)用于多线程间的协作,以及Lock接口及其实现如...
通过CountDownLatch对高并发场景模拟测试,基于AQS同步队列实现,先阻塞,等待所有线程达到并发执行的效果。
Java提供了多种机制来实现这一点,如synchronized关键字、wait()、notify()和notifyAll()方法,以及更高级的并发工具类,如Semaphore(信号量)、CyclicBarrier(循环屏障)和CountDownLatch(倒计时锁)。在模拟公交车...
面试中可能会讨论线程的创建(通过Thread类或实现Runnable接口)、线程同步(synchronized关键字、wait()、notify()、notifyAll()方法、Lock接口和Condition对象)以及并发工具类(如Semaphore、CountDownLatch、...
Java模拟快车下载器是一种利用Java编程语言实现的下载工具,它可以模拟流行的网络下载软件——快车的功能。在本文中,我们将深入探讨如何利用Java来实现这样的下载器,包括新建下载任务、暂停、继续下载以及多线程...
在`run()`方法中,模拟了组件初始化的过程,然后调用`latch.countDown()`来将计数器减1。 在`startServer()`方法中,首先打印出"Server is starting.",然后创建了一个`CountDownLatch`实例,其门限值设置为3,表示...
CyclicBarrier主要用在多线程协作场景,例如,多个线程进行棋盘游戏的AI模拟,所有玩家必须等待所有玩家准备完毕才能开始游戏。CyclicBarrier有以下关键方法: - `await()`:使当前线程等待,直到所有线程到达屏障...
本文将介绍如何使用 Java 代码模拟高并发,通过示例代码详细讲解了使用 Semaphore 和 CountDownLatch 两个类来模拟高并发的效果。 Semaphore Semaphore 是一种基于计数的信号量,可以设定一个阈值,基于此,多个...
下面是一个使用CountDownLatch的实例,模拟了运动员比赛的场景: public class TestCountDownLatch { private static final int RUNNER_NUMBER = 5; // 运动员个数 private static final Random RANDOM = new ...
7. **并发工具类**:Java 5引入了`java.util.concurrent`包,包含如`CountDownLatch`、`CyclicBarrier`和`Semaphore`等并发工具,可以帮助更好地控制线程的启动和结束,但在模拟时钟这个简单场景中可能用不上。...
本实验通过模拟实现四种经典的进程互斥算法,包括Dekker算法、Lamport算法、Peterson算法和Eisenberg算法,旨在让学生深入理解这些算法的原理及其在Java中的实现。 Dekker算法是最早提出的解决临界区问题的方法之一...