龟兔赛跑!!!

让我们来用线程的知识模拟一个有趣的龟兔赛跑游戏。

比赛规则

兔子与乌龟一起跑,每次步长都一样,兔子每跑40步就睡一会,谁先跑到100步,就获得胜利!

Runnable实现

public class Racer implements Runnable{
	private String winner; //胜利者
	public static void main(String[] args) {
		Racer racer = new Racer();
		new Thread(racer,"乌龟").start();
		new Thread(racer,"兔子").start();
	}
	//重写run方法
	public void run(){
		for(int steps=1;steps<=100;steps++){
			//让兔子睡觉
			if(Thread.currentThread().getName().equals("兔子")&&steps%40==0){
				try {
					Thread.sleep(5);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
			System.out.println(Thread.currentThread().getName()+"-->"+steps);
			//判断比赛是否结束
			boolean flag = gameOver(steps);
			if(flag) break;
		}
	}
	public boolean gameOver(int steps){
		if(winner!=null) return true;  //健壮性
		else{
			if(steps==100){  //谁跑到100步,游戏就结束
				winner = Thread.currentThread().getName();
				System.out.println("winner is:"+winner);
				return true;
			}
		}
		return false;
	}
}

最终结果

在这里插入图片描述

Callable实现

public class Racer2 implements Callable<Integer>{
	private String winner; //胜利者
	public static void main(String[] args) throws InterruptedException, ExecutionException {
			//1、创建目标对象: 
			Racer2 racer = new Racer2();
			//2、创建执行服务: 
			ExecutorService ser = Executors.newFixedThreadPool(2);
			//3、提交执行:  
			Future<Integer> result1 = ser.submit(racer);
			Future<Integer> result2 = ser.submit(racer);
			//4、获取结果:  
			Integer r1 =result1.get();
			Integer r2 =result2.get();
			System.out.println(r1+"-->"+r2);
			//5、关闭服务:
			ser.shutdownNow();
	}
	//重写run方法
	public Integer call() throws InterruptedException{
		for(int steps=1;steps<=100;steps++){
			//让兔子睡觉
			if(Thread.currentThread().getName().equals("pool-1-thread-1")&&steps%40==0){
					Thread.sleep(5);
			}
			System.out.println(Thread.currentThread().getName()+"-->"+steps);
			//判断比赛是否结束
			boolean flag = gameOver(steps);
			if(flag) return steps;
		}
		return null;
	}
	public boolean gameOver(int steps){
		if(winner!=null) return true;  //健壮性
		else{
			if(steps==100){  //谁跑到100步,游戏就结束
				winner = Thread.currentThread().getName();
				if(winner.equals("pool-1-thread-1")) System.out.println("winner is:兔子");
				else System.out.println("winner is:乌龟");
				return true;
			}
		}
		return false;
	}
}

分析

以上是两份不同方式实现的完整代码,功能很简单,用Thread.sleep() 模拟了兔子睡觉的过程,开启两个线程模拟兔子和乌龟同时赛跑。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值