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("平局!"); } } } }
上一篇:
通过多线程提高代码的执行效率例子
下一篇:
公众号被动消息回复原理