使用多线程模拟龟兔赛跑,乌龟和兔子 共用一个赛道Race,兔子每10步进行休眠。

使用多线程模拟龟兔赛跑

/*
  乌龟和兔子 共用一个赛道Race

  举例:跑步的步数:1-100
  定义一个结束比赛的方法
  打印出'胜利者'
 */
public class Race implements Runnable {	
	//声明一个变量
	public static String winner ; //胜利者 //加入关键字static:随着类的加载而加载
	@Override
	public void run() {

		//兔子和乌龟都需要跑
		for(int x = 1 ; x <= 100 ; x ++) {//x为步数
			//模拟兔子睡觉
			//加入逻辑判断
			//如果当前线程名称是"兔子"
			if(Thread.currentThread().getName().equals("兔子") && (x%10==0)) {
                //兔子并且它每10步进行休眠
				try {
					Thread.sleep(20);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
			
			//调用比赛是否结束的方法
			boolean flag = gameOver(x)  ; //参数为步数
			if(flag) {
				break ; //比赛结束
			}
			
			System.out.println(Thread.currentThread().getName()+"跑了===>"+x+"步");
		}
		
	}
	
	//判定是否结束比赛
	private boolean gameOver(int steps) {//步数
		//情况1:
		if(winner!=null) {
			return true ;
		}{
			//情况2:如果当前步数steps>=100 :跑完了
			if(steps>=100) {
				//步数已经取到最大值
				//给winner去赋值
				winner = Thread.currentThread().getName() ;
				System.out.println("winner is"+winner);
				return true ;
			}
		}
		
		return false;
	}


	//用户线程 
	public static void main(String[] args) {
		
		//创建资源类对象:跑道
		Race r = new Race() ;
		
		//创建两个线程
		Thread t1 = new Thread(r, "兔子") ;
		Thread t2 = new Thread(r, "乌龟") ;
		
		//分别启动线程
		t1.start();
		t2.start();
	}

}

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值