.龟兔赛跑:2000米 ; 2.兔子每 0.1 秒 5 米的速度,每跑20米休息1秒; 3.乌龟每 0.1 秒跑 2 米,不休息; 4.其中一个跑到终点后另一个不跑了! (二)要求 1.创建一个Animal动物类,继承Thread,编写一个running抽象方法,重写run方法,把running方法在run方法里面调用。 2.创建Rabbit兔子类和Tortoise乌龟类,继承动物类 3.两个子类重写running方法 4.本题的第3个要求涉及到线程回调(Calltoback)。需要在动物类创建一个回调接口,创建一个回调对象。 java
时间: 2023-06-20 22:08:54 浏览: 92
下面是代码实现:
```
// Animal.java
public abstract class Animal extends Thread {
public CallBack callBack;
public void setCallBack(CallBack callBack) {
this.callBack = callBack;
}
public abstract void running();
@Override
public void run() {
super.run();
while (true) {
running();
}
}
}
// CallBack.java
public interface CallBack {
void win();
}
// Rabbit.java
public class Rabbit extends Animal {
private int speed = 5;
private int rest = 0;
private int total = 0;
public Rabbit(String name) {
super(name);
}
public void running() {
if (total >= 2000) {
if (callBack != null) {
callBack.win();
}
System.out.println("兔子赢了!");
System.exit(0);
}
total += speed;
rest++;
if (rest == 20) {
rest = 0;
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(getName() + "跑了" + total + "米");
}
}
// Tortoise.java
public class Tortoise extends Animal {
private int speed = 2;
private int total = 0;
public Tortoise(String name) {
super(name);
}
public void running() {
if (total >= 2000) {
if (callBack != null) {
callBack.win();
}
System.out.println("乌龟赢了!");
System.exit(0);
}
total += speed;
System.out.println(getName() + "跑了" + total + "米");
}
}
// Main.java
public class Main {
public static void main(String[] args) {
CallBack callBack = new CallBack() {
public void win() {
System.out.println("比赛结束");
}
};
Rabbit rabbit = new Rabbit("兔子");
rabbit.setCallBack(callBack);
Tortoise tortoise = new Tortoise("乌龟");
tortoise.setCallBack(callBack);
rabbit.start();
tortoise.start();
}
}
```
此处采用了线程回调的方式,当其中一个动物线程跑完后,会回调 CallBack 接口中的 win 方法,提示比赛结束。
阅读全文