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是共享的

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

猜你喜欢

转载自www.cnblogs.com/fyscn/p/11358448.html
今日推荐