java使用线程模拟龟兔赛跑(总长100m):乌龟和兔子同时开始,兔子跑到80m时,开始睡觉,乌龟爬到终点时,兔子醒来跑完全程。
时间: 2024-12-14 13:15:13 浏览: 20
在Java中,我们可以使用`Thread`类和`Runnable`接口来模拟这个经典的“龟兔赛跑”场景。这里我们创建两个线程:一个代表兔子,一个代表乌龟。
首先,我们需要定义一个`Turtle`类和一个`Rabbit`类,它们都实现了`Runnable`接口:
```java
class Turtle implements Runnable {
private int distanceToReach;
public Turtle(int distance) {
this.distanceToReach = distance;
}
@Override
public void run() {
while (distanceToReach != 100) {
System.out.println("乌龟正在爬...");
distanceToReach++;
}
System.out.println("乌龟到达终点!");
}
}
class Rabbit implements Runnable {
private int distanceRun;
private volatile boolean asleep;
public Rabbit(int distance) {
this.distanceRun = distance;
}
@Override
public void run() {
while (!asleep || distanceRun < 100) {
if (distanceRun < 80) {
System.out.println("兔子正在快速奔跑...");
distanceRun += 80; // 兔子一口气跑80米
} else {
System.out.println("兔子休息...");
asleep = true;
while (asleep) {
// 模拟兔子睡眠期间乌龟爬行
}
asleep = false;
distanceRun = 100; // 兔子醒来继续剩余路程
System.out.println("兔子醒来并完成剩余路程...");
}
}
System.out.println("比赛结束,兔子到达终点!");
}
}
```
然后,创建一个`main`方法启动这两个线程:
```java
public static void main(String[] args) {
Thread turtleThread = new Thread(new Turtle(100));
Thread rabbitThread = new Thread(new Rabbit(100));
// 同时开始
turtleThread.start();
rabbitThread.start();
// 等待两个线程都结束
try {
turtleThread.join();
rabbitThread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
```
在这个例子中,兔子先跑了80米后进入休眠状态,而乌龟则继续爬行直到终点。当兔子醒来时,它已经落后于乌龟,直接跑完剩下的路程。由于`join`方法会阻塞主线程,所以我们可以在主线程等待两个线程结束之后查看比赛结果。
阅读全文