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

邮差的信 提交于 2020-02-20 04:20:58
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是共享的

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!