`
lijunaccp
  • 浏览: 159040 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

CountDownLatch关于比赛的例子

 
阅读更多
package com.test;

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

public class CountDownLatchTest
{

	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		final CountDownLatch referee = new CountDownLatch(1); // 1名裁判
		final CountDownLatch athlete = new CountDownLatch(3); // 3个运行员

		ExecutorService pool = Executors.newCachedThreadPool();
		for (int i = 0; i < 3; i++)
		{
			pool.execute(new Runnable()
			{
				public void run()
				{
					System.out.println("运动员:"
							+ Thread.currentThread().getName() + "准备就绪!");
					try
					{
						referee.await();
						System.out.println("运动员:"
								+ Thread.currentThread().getName() + "开始起跑!");
						Thread.sleep(new Random().nextInt(10000));
					}
					catch (InterruptedException e)
					{
						e.printStackTrace();
					}
					athlete.countDown();
					System.out.println("运行员:"
							+ Thread.currentThread().getName() + "完成比赛!");
				}
			});
		}
		
		try
		{
			Thread.sleep(new Random().nextInt(10000));
			System.out.println("裁判:"
					+ Thread.currentThread().getName() + "命令发出");
			referee.countDown();   //起跑命令
			System.out.println("裁判:"
					+ Thread.currentThread().getName() + "等待结果");
			athlete.await();
			System.out.println("裁判:"
					+ Thread.currentThread().getName() + "公布结果");
		}
		catch (InterruptedException e)
		{
			e.printStackTrace();
		}
		
		pool.shutdown();
	}

}

分享到:
评论

相关推荐

    Java中CountDownLatch用法解析

    在上述例子中,它被用来模拟一场有5位运动员的比赛,确保所有运动员都准备好后比赛才开始,并且所有运动员都完成比赛后比赛才结束。 首先,我们来看一下`CountDownLatch`的基本原理。构造`CountDownLatch`时需要...

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

    在上述的百米赛跑例子中,CountDownLatch被巧妙地应用了。`CountDownLatch(int count)`构造函数接收一个初始计数值,表示需要等待的线程数量。每个线程完成任务后,调用`countDown()`方法使计数值减一,直到计数值减...

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

    例如,在篮球比赛的例子中,控球后卫(主线程)等待所有球员到位后才开始进攻。 ```java CountDownLatch countDownLatch = new CountDownLatch(5); // 5位球员 // 模拟球员到位 for (int i = 0; i ; i++) { ...

    CountDownLatch同步工具类使用详解

    在上面的例子中,我们使用CountDownLatch来控制线程的执行顺序,使得主线程等待代表选手的线程执行完成后再执行。我们可以看到,通过CountDownLatch的使用,我们控制了线程的执行顺序。在上面的代码中,我们使用到...

    Java兔子乌龟公鸡赛跑

    在Java中,我们可以使用各种并发工具类,如`java.util.concurrent`包中的`CountDownLatch`或`CyclicBarrier`,来更精确地控制线程之间的交互。 此外,"RTCRunGame"可能是包含这个多线程赛跑游戏完整实现的源代码...

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

    这个例子展示了4个线程(参与者)各自执行`doSomething()`,然后在`CyclicBarrier`上等待,直到所有线程都到达,才会执行回调函数,表示所有准备工作完成,比赛开始。 总结来说,`java.util.concurrent`包中的`...

    guitusaipao.zip_java 龟兔赛跑_龟兔_龟兔赛跑 java

    - 可能使用了`java.util.concurrent`包中的工具类,比如`CountDownLatch`或`CyclicBarrier`,来确保所有线程准备好后再开始比赛。 4. **GUI(图形用户界面)**: - 提供的`tuzi.gif`和`wugui.gif`可能是龟和兔的...

    Java计算机语言函数应用(PDG).rar

    `java.util.concurrent`包提供了线程和锁的高级工具,如ExecutorService、Future和Callable接口,以及Semaphore和CountDownLatch等同步工具,帮助开发者编写高效的多线程程序。 最后,本书可能会涵盖Java的最新特性...

    简单的龟兔赛跑,运用多线程,在jdk8编写.zip

    - **CountDownLatch**:可能被用来确保所有线程完成特定操作后,比赛才能结束。在龟兔赛跑的例子中,可以设置一个计数器为2(代表龟和兔),每只动物到达终点时减一,直到计数器归零。 - **CyclicBarrier**:类似...

    多线程优先级示例_赛马

    在代码中,我们需要确保所有的线程都准备好后,才开始比赛,这通常通过一个共享信号量或者同步机制(如`CountDownLatch`)来实现。 在运行过程中,观察哪个线程(马)先完成(到达终点),可以直观地看出优先级的...

    java多线程练习demo 基本的线程使用方式 生产者消费者练习 龟兔赛跑练习.zip

    在这个压缩包中,我们可以找到一个名为 "multithreading-master" 的文件夹,它可能包含了多个关于多线程的示例项目,比如生产者消费者问题和龟兔赛跑的模拟。 首先,让我们来详细了解一下Java中的多线程。在单线程...

    浅析Java中如何实现线程之间通信

    对于三个运动员的例子,可以设置一个 CyclicBarrier,当所有运动员都到达“起跑线”(屏障点)后,比赛开始。 5. **FutureTask 和 Callable**: `FutureTask` 是一个实现了 `RunnableFuture` 接口的任务,它允许你...

    Race_race_多线程_

    为了确保比赛的公平性,我们需要使用同步机制,如`synchronized`关键字、`wait()`、`notify()`或Java并发包(`java.util.concurrent`)中的工具类,如`Semaphore`或`CountDownLatch`,来控制线程的执行顺序和资源访问...

Global site tag (gtag.js) - Google Analytics