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("平局!");
			}
		}

	}
}
经验分享 程序员 微信小程序 职场和发展