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

/**
 * 一段模拟龟兔赛跑的多线程程序。<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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一些关于Java多线程和图形界面的知识,以及如何将它们应用于实现龟兔赛跑程序。 Java多线程是Java编程语言的一个重要特性,它允许程序在同一间执行多个不同的任务。在Java中,创建一个线程可以通过继承Thread类或实现Runnable接口来实现。一般而言,使用实现Runnable接口的方式比较常见,因为它允许在一个类中实现多个线程。 对于图形界面,Java提供了Swing工具包,它是一种用于创建GUI的Java类库,包含了各种GUI组件,如按钮、文本框、标签等。使用Swing可以轻松地创建GUI应用程序,同也可以通过Swing提供的布局管理器来控制组件的位置和大小。 将多线程和图形界面结合起来,可以实现各种有趣的应用程序,如龟兔赛跑游戏。在这个游戏中,可以创建两个线程分别表示乌龟和兔子,它们在GUI中的位置可以随机变化。然后,每个线程都可以在自己的run()方法中实现一些逻辑,如前进、睡觉等。同,使用Swing可以在GUI中显示龟兔的位置和比赛结果,增强游戏的交互性和可玩性。 下面一个简单的示例代码,它演示了如何使用Java多线程和Swing实现龟兔赛跑游戏: ``` import javax.swing.*; import java.awt.*; import java.util.Random; public class TurtleRabbitRace extends JFrame implements Runnable{ private JLabel turtleLabel, rabbitLabel, resultLabel; private int turtleDistance, rabbitDistance; private Random random; public TurtleRabbitRace(){ // 初始化GUI组件 setSize(500, 300); setTitle("Turtle Rabbit Race"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); turtleLabel = new JLabel(new ImageIcon("turtle.png")); rabbitLabel = new JLabel(new ImageIcon("rabbit.png")); resultLabel = new JLabel("Ready, set, go!"); JPanel panel = new JPanel(); panel.add(turtleLabel); panel.add(rabbitLabel); panel.add(resultLabel); add(panel); // 初始化比赛参数 turtleDistance = 0; rabbitDistance = 0; random = new Random(); } public void run(){ while(turtleDistance < 100 && rabbitDistance < 100){ // 计算乌龟和兔子前进的距离 turtleDistance += random.nextInt(5); rabbitDistance += random.nextInt(10); // 更新GUI中乌龟和兔子的位置 turtleLabel.setLocation(turtleDistance * 4, 50); rabbitLabel.setLocation(rabbitDistance * 4, 100); // 休眠一段间,模拟乌龟和兔子的移动速度 try{ Thread.sleep(100); }catch(InterruptedException e){ e.printStackTrace(); } } // 显示比赛结果 if(turtleDistance >= 100){ resultLabel.setText("Turtle wins!"); }else{ resultLabel.setText("Rabbit wins!"); } } public static void main(String[] args){ // 创建游戏实例,并启动两个线程分别表示乌龟和兔子 TurtleRabbitRace game = new TurtleRabbitRace(); Thread turtleThread = new Thread(game); Thread rabbitThread = new Thread(game); turtleThread.start(); rabbitThread.start(); // 显示GUI game.setVisible(true); } } ``` 这个示例代码创建了一个TurtleRabbitRace类,它继承了JFrame类,并实现了Runnable接口。在构造函数中,创建了乌龟、兔子和结果标签,并将它们加入到一个JPanel中。在run()方法中,不断地更新乌龟和兔子的位置,直到有一个到达终点。最后,在main()方法中,创建了一个游戏实例,并启动了两个线程分别表示乌龟和兔子。同,通过setVisible()方法显示GUI界面。 请注意,这只是一个简单的示例,实际的龟兔赛跑游戏可能需要更多的逻辑和组件。但是,这个示例代码可以让您了解如何使用Java多线程和Swing实现一个基本的游戏程序

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值