JAVA 线程入门经典实例:龟兔赛跑

JAVA 线程入门经典实例:龟兔赛跑

JAVA实验课 龟兔赛跑
设计2个线程, 一个表示乌龟, 一个表示兔子。
乌龟每秒跑一步, 步长为10以内的随机数;
兔子每5秒跑一步,步长为30以内的随机数;
假设整个赛道总长为100步长,看看谁先到达终点。

**刚开始我的思路是:**写三个分开的类:

代码:

/**
 * 
 */

public class M {
 public static void main(String[] args) {
	 	new Thread(new Rabbit()).start();
	 	new Thread(new Tortoise()).start();
	 	
	 	//让本线程睡一下
	 	try {
			Thread.sleep(600);//休息时间
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	 	
	 	if(Rabbit.d>Tortoise.c){
	     System.out.println("乌龟胜利");
	    }
	    else{
	     System.out.println("兔子胜利"); 
	     }
	 }
} 

mport java.util.Random;
public class Rabbit implements Runnable {
	
	public static int d=0;
	 private volatile int total=0;//记录行驶的步长
	 @Override
	 public  void run() {
	  for(int i=1;i<=100;i++){
		  
		  try {
				Thread.sleep(50);//休息时间
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		  
	   int step=new Random().nextInt(30);
	      total+=step;
	            if(total>=100){
	             System.out.println("兔子结束");
		         d=i;
	             break;
	            }
	  }
	            System.out.println("兔子使用的时间="+d);
	 }
	}

import java.util.Random;
/**
 *   Aurora   2020年4月10日
 */
public class Tortoise implements Runnable {
	public static int c=0;
	 private volatile int sum=0;//记录行驶的步长
	 @Override
	 public void run() {//重写的方法(重载)
	  for(int j=1;j<=100;j++){
		  try {
				Thread.sleep(10);//休息时间
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
	      int m=new Random().nextInt(10);
	      sum += m;
	            if(sum >=100){
	             System.out.println("乌龟结束");
		         c=j;
	             break;
	            }
	  }
	  System.out.println("乌龟使用的时间="+c);
	 }
	}

**后来我又想到了内部类的概念,于是代码就成这样了:
**


import java.util.Random;

public class MAIN{
	
	public static boolean f1=false;
	public static boolean f2=false;
	
 public static void main(String[] args) {
	 	new Thread(new Rabbit()).start();
	 	new Thread(new Tortoise()).start();
	 	for(int q=0;q<100;q++) {
	 		//让本线程睡一下
		 	try {
				Thread.sleep(50);//休息时间
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		 	if(f1&&f2) {
			 	if(Rabbit.d>Tortoise.c){
			     System.out.println("乌龟胜利");
			    }
			    else{
			     System.out.println("兔子胜利"); 
			     }
			 	break;
		 	}
	 	}
	 	
	 }
 public static class Rabbit implements Runnable {
		
		public static int d=0;
		 private volatile int total=0;//记录行驶的步长
		 @Override
		 public  void run() {
		  for(int i=1;i<=100;i++){
			  try {
					Thread.sleep(5);//休息时间
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
		   int step=new Random().nextInt(30);
		      total+=step;
		            if(total>=100){
		             System.out.println("兔子结束");
			         d+=i;
		             break;
		            }
		  }
		            System.out.println("兔子使用的时间="+d);
		            f1=true;
		 }
		}
 public static class Tortoise implements Runnable {
		public static int c=0;
		 private volatile int sum=0;//记录行驶的步长
		 @Override
		 public void run() {
		  for(int j=1;j<=100;j++){
			  try {
					Thread.sleep(1);//休息时间
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
		      int m=new Random().nextInt(10);
		      sum += m;
		            if(sum >=100){
		             System.out.println("乌龟结束");
			         c+=j;
		             break;
		            }
		  }
		  System.out.println("乌龟使用的时间="+c);
		  f2=true;
		 }
	 }
}

发布了41 篇原创文章 · 获赞 1 · 访问量 1292

猜你喜欢

转载自blog.csdn.net/DAurora/article/details/105445303