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

78 篇文章 4 订阅
21 篇文章 0 订阅

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;
		 }
	 }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的龟兔赛跑程序,使用Java多线程编程实现: ```java public class TurtleRabbitRace { public static void main(String[] args) { Rabbit rabbit = new Rabbit(); Turtle turtle = new Turtle(); Thread rabbitThread = new Thread(rabbit); Thread turtleThread = new Thread(turtle); rabbitThread.start(); turtleThread.start(); } } class Rabbit implements Runnable { private int position = 0; public void run() { while (position < 100) { position += 3; System.out.println("兔子跑了 " + position + " 米"); try { Thread.sleep(100); // 休眠100毫秒 } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("兔子到达了终点!"); } } class Turtle implements Runnable { private int position = 0; public void run() { while (position < 100) { position += 1; System.out.println("乌龟跑了 " + position + " 米"); try { Thread.sleep(200); // 休眠200毫秒 } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("乌龟到达了终点!"); } } ``` 在这个程序中,我们定义了两个类:`Rabbit` 和 `Turtle`,它们都实现了 `Runnable` 接口。在 `run()` 方法中,我们使用了 `while` 循环模拟龟兔赛跑的过程,不断地更新位置并输出信息。在每次更新位置之后,我们使用 `Thread.sleep()` 方法让线程休眠一段时间,以模拟兔子乌龟的不同速度。 在 `main()` 方法中,我们创建了两个线程分别运行兔子乌龟的 `run()` 方法,并调用了 `start()` 方法启动线程。 运行程序后,你会看到兔子乌龟在终端上输出每次更新的位置信息,直到其中一个到达终点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值