多线程龟兔赛跑(Java)

多线程龟兔赛跑

1.龟兔在同一赛道(thread对象使用同一runnable,runnabl就是两对象跑的赛道)
2.兔子喜欢睡觉
3.超过1000米就赢了 游戏结束gameOver
package thread.demo1;
//龟兔赛跑
public class Race implements Runnable {
    private static String winner;//胜利者
    @Override
    public void run() {
        boolean flag;
        for(int i=1;i<=1000;i++){
            if(Thread.currentThread().getName().equals("兔子")&&i%5==0){
                try {
                    System.out.println("兔子睡了");
                    Thread.sleep(1);//现在的电脑跑太快了 睡太久看不见了
                    i+=5;
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            flag=gameOver(i);
            if(flag){
                //如果在这里面输出胜利者 会超过一百米输出一次 给胜利者赋值
                //  有胜利者了再输出一次
                break;
            }
            System.out.println(Thread.currentThread().getName()+"跑了"+i+"米");
        }
    }

    public boolean gameOver(int dist){
        if(winner!=null){//已有胜利者
            return true;
        }else{
            if(dist>=1000){//超过一百米了 赢了
                winner=Thread.currentThread().getName();
                System.out.println("winner is"+winner);//超过一百米 就输出 flag=true 循环不会再进行
                return true;
            }
            //还没到终点
            return false;
        }
    }

    public static void main(String[] args) {
        Race race=new Race();//runnable 同一赛道
        new Thread(race,"兔子").start();
        new Thread(race,"乌龟").start();
        //也可以使用new Thread使用同一继承Thread的对象 只要能共享资源就行
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值