`
java2000.net
  • 浏览: 654992 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

一段模拟龟兔赛跑的多线程代码

    博客分类:
  • JAVA
阅读更多
/**
 * 一段模拟龟兔赛跑的多线程程序。<br>
 * 兔子比乌龟快5倍,但休息的时间长10倍。
 * 
 * @author 赵学庆,Java世纪网(java2000.net)
 * 
 */
public class T {

  public static void main(String[] args) {
    TortoiseRace a = new TortoiseRace();
    Thread runner1 = new Thread(a);
    RabbitRace b = new RabbitRace();
    Thread runner2 = new Thread(b);
    runner1.start();
    runner2.start();
    while (ready < 2) {
      try {
        Thread.sleep(1);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
    synchronized (lock) {
      lock.notifyAll();
    }
  }

  static Object lock = new Object();
  static int ready = 0;
}

class TortoiseRace implements Runnable {
  public void run() {
    synchronized (T.lock) {
      T.ready++;
      try {
        T.lock.wait();
      } catch (InterruptedException e1) {
        e1.printStackTrace();
      }
    }
    int TortoiseDistance = 0;
    for (int i = 0; TortoiseDistance <= 1000; i++) {
      TortoiseDistance++;
      System.out.println("乌龟跑了1米!");
      try {
        Thread.sleep(1);
      } catch (InterruptedException e) {
      }
    }
    System.out.println("乌龟已经跑完了比赛路程!");

  }
}

class RabbitRace implements Runnable {
  public void run() {
    T.ready++;
    synchronized (T.lock) {
      try {
        T.lock.wait();
      } catch (InterruptedException e1) {
        e1.printStackTrace();
      }
    }
    int RabbitDistance = 0;
    for (int j = 0; RabbitDistance <= 1000; j++) {
      RabbitDistance += 5;
      System.out.println("兔子跑了5米!");
      try {
        Thread.sleep(10);
      } catch (InterruptedException e) {
      }
    }
    System.out.println("兔子跑完了比赛路程!");

  }
}
 
1
4
分享到:
评论
4 楼 zwaway 2012-08-06  
刚才又看了一下,这个模拟好像有点问题,因为执行TortoiseDistance++与RabbitDistance += 5这两句的时间几乎可以忽略,因此龟与兔的速度就是一个定值,即龟1/sleep(1)与兔5/sleep(10),这样明显龟的速度大于兔的速度,即然龟的速度是兔的速度2倍,怪不得的试了这么多一直是龟先完成。
3 楼 zwaway 2012-08-06  
哦,原来我看错了,加了两段标记,
   在 System.out.println("乌龟已经跑完了比赛路程!");之后加
    System.out.println("TortoiseDistance:"+TortoiseDistance);
在System.out.println("兔子跑完了比赛路程!");之后加
    System.out.println("RabbitDistance:"+RabbitDistance);
结果都是乌龟先完成比赛。
个人觉得程序再改进一下,谁先到达终点另一个线程就终止,再显示另一个线程跑了多远;或者是两个线程都跑完分别耗时多少。
2 楼 zwaway 2012-08-06  
觉得有点问题,测试了二十次都是兔子跑完了比赛。
1 楼 shengfuqiang 2012-05-24  
有什么内涵,指点指点?

相关推荐

    趣味JAVA-- 一个描述龟兔赛跑的多线程小程序

    一段模拟龟兔赛跑的多线程程序,兔子比乌龟快5倍,但休息的时间长10倍。

    模拟龟兔赛跑程序

    要求: 能设置比赛时间,马匹的数量等等。 在任意时间段内马匹的速度是随机的。 开始比赛之后以动画显示赛马过程。 提示:使用多线程

    java线程龟兔赛跑

    本示例中的“java线程龟兔赛跑”是一个经典的多线程应用,通过模拟龟兔赛跑的故事,帮助开发者理解如何在Java中创建和管理线程。 首先,我们要了解Java中创建线程的两种主要方式:通过继承`Thread`类和实现`...

    VisualStudio2008创建的龟兔赛跑动画多线程程序演示,C#源代码.

    本示例中的"Visual Studio 2008创建的龟兔赛跑动画多线程程序演示"是一个很好的教学实例,它结合了编程语言C#与微软的开发环境Visual Studio 2008,来展示如何利用多线程技术来实现动态的图形化应用程序。...

    龟兔赛跑Java源码

    在编程世界中,"龟兔赛跑"是一个经典的多线程示例,它源自于一个古老的故事,通过编程实现来教育我们关于线程同步和协作的重要性。在这个Java源码中,我们将深入探讨如何利用线程来模拟故事的情节,以及在Java中如何...

    java多线程龟兔赛跑程序.zip

    "java多线程龟兔赛跑程序.zip"是一个示例项目,它使用Java语言来实现经典的龟兔赛跑故事,以帮助开发者理解如何在多线程环境下进行编程。这个项目可能包含了源代码、测试文件以及其他相关文档,其主要目标是演示如何...

    赛马游戏,模拟龟兔赛跑(使用多线程)。能设置比赛时间,马匹的数量等等。

    赛马游戏,基于多线程技术实现的龟兔赛跑模拟器,提供了丰富的自定义选项,如比赛时间、参赛马匹数量等。这样的程序设计旨在展示并发编程的应用,特别是线程间的协作与竞争,以及如何通过多线程来实现动态且实时的...

    基于Java多线程机制的龟兔赛跑程序.pdf

    现在,让我们来看看如何利用Java的多线程机制来模拟一个经典的寓言故事——龟兔赛跑。在这个程序中,我们将创建两个线程:龟线程和兔线程,分别代表故事中的龟和兔。这两个线程将模拟它们在赛跑过程中的移动。龟线程...

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

    这个"简单的龟兔赛跑,运用多线程,在jdk8编写"的示例是基于经典的寓言故事,通过多线程来模拟龟兔赛跑的过程。下面将详细介绍这个例子中的相关知识点。 1. **线程基础**: - **线程**:线程是操作系统分配CPU时间...

    JAVA课程设计题目

    2. 模拟龟兔赛跑:用图形用户界面实现,能设置比赛时间,马匹的数量等等。在任意时间段内马匹的速度是随机的。 知识点:图形用户界面编程、多线程。 3. 学生信息管理系统:使用图形用户界面用数据库建立1或2个学生...

Global site tag (gtag.js) - Google Analytics