龟兔赛跑
1.动物类Animal
public abstract class Animal extends Thread{
public static final int sumLength = 20;
protected int length = sumLength;
protected Finish end = null;
@Override
public void run() {
while(length>0) {
runing();
}
}
public abstract void runing();
public void setEnd(Finish end) {
this.end = end;
}
static interface Finish{
void Fin();
}
2.兔子类Rabbit
public class Rabbit extends Animal{
@Override
public void runing() {
int dis = 5;
length -= dis;
System.out.println("兔子跑了"+dis+"米,距离终点还有"+length+"米");
if(length<=0) {
length = 0;
System.out.println("兔子获胜了");
if(end!=null) {
end.Fin();
}
}
try {
if((sumLength-length)%20==0) {
sleep(1100);
}
else
sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
3.乌龟类Tortoise
public class Tortoise extends Animal{
@Override
public void runing() {
int dis = 2;
length -= dis;
System.out.println("乌龟跑了"+dis+"米,距离终点还有"+length+"米");
if(length<=0) {
length = 0;
System.out.println("乌龟跑赢了!");
if(end!=null) {
end.Fin();
}
}
try {
sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
4.比赛结束实现类FinishImpl
import com.animalRun.Animal.Finish;
public class FinishImpl implements Finish{
private Thread otherThread;
public FinishImpl(Thread other) {
this.otherThread = other;
}
public void Fin() {
if(otherThread != null)
otherThread.stop();
}
}
5.测试类Test
public class Test {
public static void main(String[] args) {
Rabbit r = new Rabbit();
Tortoise t = new Tortoise();
r.setEnd(new FinishImpl(t));
t.setEnd(new FinishImpl(r));
r.start();
t.start();
}
}