Java多线程——模拟龟兔赛跑的场景

题目分析

1. 编写龟兔赛跑多线程程序,设赛跑长度为100米,先完成的一方胜利。

2. 兔子要休眠一段时间,但是跑步速度更快,乌龟不休眠,但是速度慢.

3. 编写兔子和乌龟类 RabbitAndTurtle继承Thread.然后编写逻辑.

4. 使用Thread的sleep(long milis)方法使线程休眠来控制兔子休眠时间.

5. 用Math.random()方法或setPriority控制双方线优先度.模拟比赛过程.

具体实现

RabbitAndTurtle类

package mydemo.thread;

public class RabbitAndTurtle extends Thread {

    public RabbitAndTurtle(String name) {
        super(name);
    }

    public final int distance = 100;
    static boolean flag = true;
    public int predistance = 0;

    @Override
    public void run() {

        double ran = Math.random();
        String name = Thread.currentThread().getName();
        while (flag) {
            try {
                Thread.sleep(100);//意为让当前线程休眠0.1秒。(龟兔跑完一次等待0.1秒)
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            if (name.equals("乌龟")) {
                if (Math.random() < 1) {
                    predistance += 1;
                    System.out.println(name + "跑了:" + predistance + "米");
                    if (predistance == distance) {
                        System.out.println("***************乌龟赢了***************");
                        flag = false;
                        break;
                    }
                }
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if (name.equals("小兔子")) {
                if (Math.random() < 0.7) {
                    predistance += 2;
                    System.out.println(name + "跑了:" + predistance + "米");
                    if (predistance == distance) {
                        System.out.println("***************小兔子赢了***************");
                        flag = false;
                        break;
                    }
                }
                try {
                    Thread.sleep(200);  //兔子休眠时间是乌龟的两倍
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }

        }

    }
}

Race

public class Race {
    public static void main(String[] args) {
        RabbitAndTurtle rabbit = new RabbitAndTurtle("小兔子");
        RabbitAndTurtle turtle = new RabbitAndTurtle("乌龟");
        rabbit.start();
        turtle.start();
    }
}

输出:

······
乌龟跑了:97米
乌龟跑了:98米
小兔子跑了:94米
乌龟跑了:99米
乌龟跑了:100米
***************乌龟赢了***************

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值