java多线程练习--龟兔赛跑程序2
题目:
-
龟兔赛跑程序,设赛跑长度为30米 兔子的速度 10米每秒, 兔子每跑完10米休眠10秒 乌龟的速度 1米每秒, 乌龟每跑完10米休眠1秒 要求:等兔子和乌龟的线程结束时,公布结果 提示:使用System.currentTimeMillis()
将兔子类和乌龟类的公共部分提取出来,形成一个新的sporter类
Sporter类:
public class Sporter extends Thread {
private long time;
private long runtimePerMeter; // 跑一米的时间
private long restTime; // 休息时间
private static boolean flag = true; // 用来判断谁先跑够x米
private final int MAX_DISTANCE = 30;
private int distance;
@Override
public void run(){
long start = System.currentTimeMillis();
while(distance < MAX_DISTANCE && flag){
try {
Thread.sleep(runtimePerMeter);
distance ++;
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(getName() + "跑了" + distance + "米");
if(distance % 10 == 0 && distance < MAX_DISTANCE){
try {
Thread.sleep(restTime);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
if(distance == MAX_DISTANCE){
flag = false;
System.out.println(getName() + "已到达终点!");
}
long end = System.currentTimeMillis();
this.time = end - start;
}
public Sporter(String name, long runtimePerMeter, long restTime) {
super(name);
this.runtimePerMeter = runtimePerMeter;
this.restTime = restTime;
}
public long getTime() {
return time;
}
public int getDistance() {
return distance;
}
}
测试类:
public class TestThread1 {
public static void main(String[] args){
Sporter wugui = new Sporter("乌龟", 1000,1000);
Sporter tuzi = new Sporter("兔子",100,10000);
wugui.start();
tuzi.start();
try {
wugui.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
tuzi.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
if(wugui.getDistance() < tuzi.getDistance()){
System.out.println("兔子赢了!");
}else if(wugui.getDistance() > tuzi.getDistance()){
System.out.println("乌龟赢了!");
}else {
if(wugui.getTime() < tuzi.getTime()){
System.out.println("乌龟赢了!");
}else if(wugui.getTime() > tuzi.getTime()){
System.out.println("兔子赢了!");
}else {
System.out.println("平局!");
}
}
}
}
上一篇:
通过多线程提高代码的执行效率例子
下一篇:
公众号被动消息回复原理
