多线程学习(四)------线程案例:龟兔赛跑

案例说明:

案例:龟兔赛跑-Race
1.首先确定赛道距离
2.判断比赛是否结束
3.打印出胜利者
4.龟免赛跑开始
5.故事中是乌龟赢的,兔子需要睡觉,所以要模拟兔子睡觉,让乌龟赢得比赛I

代码步骤:
1、创建Runnable接口的实现类
2、定义胜利者 winner
3、用for循环(i ~100)模拟路程,并用线程休眠模拟小白兔睡觉
4、定义gameOver()方法判断比赛结束,并确定胜利者

案例:

/**
 * 2020/4/5 18:01
 * 文件说明:案例:龟兔赛跑-Race
 *          1.首先确定赛道距离
 *          2.判断比赛是否结束
 *          3.打印出胜利者
 * 			4.龟免赛跑开始
 *          5.剧情发展,兔子需要睡觉,所以要模拟兔子睡觉,让乌龟赢得比赛I
 *
 * @author 太阳以西
 * 梦可以到的地方,只要努力,总有一天,自己也可以达到!
 */
public class TestThread4 implements Runnable {
     

    //胜利者
    private static String winner;
    @Override
    public void run() {
     
        for (int i = 0 ; i<=100 ; i++){
     
            //兔子路上会睡觉
            if (Thread.currentThread().getName()=="小白兔"&&(i+1)%10==0){
     
                try {
     
                    Thread.sleep(100);
                } catch (InterruptedException e) {
     
                    e.printStackTrace();
                }
            }

            //判断比赛是否结束
            boolean flag = gameOver(i);
            //如果比赛结束,就停止程序
            if (flag){
     
                break;
            }

            try {
     
                Thread.sleep(50);
            } catch (InterruptedException e) {
     
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName()+"--->跑了"+i+"步");
        }
    }
    //判断是否完成比赛
    private boolean gameOver(int steps){
     
        //判断是否有胜利者
        if(winner!=null){
         //已经存在胜利者
            return true;
        }else{
     
            if (steps >= 100){
     
                winner = Thread.currentThread().getName();
                System.out.println("winner is"+winner);
                return true;
            }
        }
        return false;
    }

    public static void main(String[] args) {
     
        //定义赛道
        TestThread4 race = new TestThread4();
        //两人共用一个赛道
        new Thread(race,"小白兔").start();
        new Thread(race,"小乌龟").start();


    }
}

你可能感兴趣的:(java多线程,java,多线程)