java线程—经典龟兔赛跑问题

package jd1908_corejava.ch15.work;

//线程经典问题--龟兔赛跑问题
public class Race {
    public static void main(String[] args) {
        RabbitAndTurtle rabbit = new RabbitAndTurtle();
        rabbit.setName("兔子");
        RabbitAndTurtle turtle = new RabbitAndTurtle();
        turtle.setName("乌龟");
        rabbit.start();
        turtle.start();

    }
}

class RabbitAndTurtle extends Thread {
    private int num;
    // boolean类型默认初始值为false
    private static boolean flag;
    //run执行完毕后线程就会死亡,关闭
    //yield(),释放资源,回到run的顶部
    @Override
    public void run() {

        while (num < 100) {
            if (flag) {
                // 线程终止
                break;
            }
            if (Math.random() < 0.3 && Thread.currentThread().getName().equals("兔子")) {
                num += 2;
                System.out.println("兔子跑了" + num);
                if (num == 100) {
                    System.out.println("兔子赢了");
                    break;
                }
                Thread.yield();
            }
            if (Math.random() > 0.3 && Thread.currentThread().getName().equals("乌龟")) {
                num += 1;
                System.out.println("乌龟跑了" + num);
                if (num == 100) {
                    System.out.println("乌龟赢了");
                    break;
                }
                Thread.yield();
            }

        }
        if (num == 100) {
            flag = true;
        }
    }
}

注意:两个线程是相互独立的,但是flag是共享的

同种类型不用的实例化对象静态资源是共享!

转载于:https://www.cnblogs.com/fyscn/p/11358448.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个经典多线程案例,可以用Java语言实现龟兔赛跑游戏。 首先,我们需要定义一个继承自Thread类的Rabbit类和Tortoise类,并重写它们的run()方法,在这个方法实现龟兔赛跑的逻辑,例如: ```java public class Rabbit extends Thread { private int length = 100; // 赛道长度 private int speed = 5; // 兔子的速度 private int rest = 0; // 兔子的休息时间 @Override public void run() { for (int i = 0; i < length; i += speed) { System.out.println("兔子跑了" + i + "米"); // 兔子休息 if (i % 30 == 0) { try { Thread.sleep(rest); } catch (InterruptedException e) { e.printStackTrace(); } } } } } public class Tortoise extends Thread { private int length = 100; // 赛道长度 private int speed = 2; // 乌龟的速度 @Override public void run() { for (int i = 0; i < length; i += speed) { System.out.println("乌龟跑了" + i + "米"); } } } ``` 接着,我们在主函数创建Rabbit和Tortoise对象,并调用它们的start()方法来启动线程,例如: ```java public static void main(String[] args) { Rabbit rabbit = new Rabbit(); Tortoise tortoise = new Tortoise(); rabbit.start(); tortoise.start(); } ``` 这样,两个线程就会同时开始跑步,我们可以看到它们的跑步过程,最终谁会赢得比赛,就要看他们的运气了。 当然,如果你想让比赛更加有趣,还可以加入一些特殊事件,例如兔子突然发现胡萝卜,或者乌龟遇到了路障等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值