//多线程龟兔赛跑问题,乌龟和兔子比赛跑200米的距离,//名叫兔子的线程每执行一次兔子就向前跑5米,每跑50米休息10毫秒,//名叫乌龟的线程每执行一次乌龟就向前跑1米,乌龟会一直跑不休息/

 //多线程龟兔赛跑问题,乌龟和兔子比赛跑200米的距离,
//名叫兔子的线程每执行一次兔子就向前跑5米,每跑50米休息10毫秒,
//名叫乌龟的线程每执行一次乌龟就向前跑1米,乌龟会一直跑不休息
//用多线程实现求出最后的胜利者是谁
class race implements Runnable {
        //winner:只有一个胜利者
        private static String winner;
        int lengthr = 200;//lengthr为兔子需要跑的长度
        int lengtht = 200;//lengtht为乌龟需要跑的长度

        // 重写run方法,编写奔跑操作
        public void run() {
            while (true) {
                //判断线程的名字是兔子
                if (Thread.currentThread().getName().equals("兔子")) {
                    //兔子以5米的速度跑,
                    //线程每运行一次,就打印"XXX距离终点还有YYY米(XXX为线程名字,YYY为剩余的距离)",
                    //每跑50米休息10毫秒(线程休眠10毫秒),当剩余距离为0米时不再休息,请补全此处代码:
                    int disr =5;
                    for (int i = 5; i <=200; i+=5) {
                        lengthr=  200-i;
                        System.out.println("兔子距离终点还有"+lengthr+"米");
                        if(i/50==0&&i!=200){
                            try {
                                Thread.sleep(5);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                    //调用gameOver方法判断比赛是否结束
                    boolean flag = gameOver(lengthr);
                    if (flag) {
                        break;
                    }

                }
                //判断线程的名字是乌龟
                if (Thread.currentThread().getName().equals("乌龟")) {
                    //乌龟以1米的速度,会一直跑不休息,
                    //线程每运行一次,就打印"XXX距离终点还有YYY米(XXX为线程名字,YYY为剩余的距离)",请补全此处代码:
                    int dist = 1;

                    for (int i = 1; i <= 200; i++) {
                        lengtht = 200-i;
                        System.out.println("乌龟距离终点还有"+lengtht+"米");



                    }
                        //调用gameOver方法判断比赛是否结束
                    boolean flag = gameOver(lengtht);
                    if (flag) {
                        break;
                    }


                }
            }
        }
        //判断比赛是否结束
        private boolean gameOver(int lenght) {
            if (winner != null) { //如果存在胜利者
                return true;
            }
            if ( lenght == 0) {  //判断如果跑到了比赛结束
                winner = Thread.currentThread().getName();
                System.out.println("比赛结束");
                System.out.println("胜利者----->" + winner);
                return true;
            }
            return false;
        }
    }

    class testWanXing2 {
        public static void main(String[] args) {
            race race = new race(); //创建一个比赛
            //要求创建两个线程名字分别为:兔子、乌龟。并启动线程,请补全此处代码:
          new Thread(race,"兔子").start();
          new Thread(race,"乌龟").start();

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值