多线程——龟兔赛跑问题

龟兔赛跑
100米两条线程 一个乌龟 一个兔子
如果是兔子的话设置延迟函数
当有一方胜出 马上跳出循环 ==>比赛终止

package Lesson_Thread;

public class Race implements Runnable {
    private static String winner;
    @Override
    public void run() {   //开始跑步  100米
        for (int i = 0; i <=100; i++) {
            boolean flag = finish(i);   //接受”胜利者“返回的布尔类型  一有胜利者 马上跳出循环
            if(flag){
                break;
            }
            if(Thread.currentThread().getName()=="兔子" && i%50==0){    //兔子睡觉
                try {
                    Thread.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println(Thread.currentThread().getName()+"跑了第"+i+"步");
        }
    }

    public boolean finish(int step){  //判断是否有胜利者

        if(winner!=null){     //有且只有一个胜利者
            return true;
        }
        if(step>=100){    //判断胜利者
            winner=Thread.currentThread().getName();
            System.out.println("winner is "+winner);
            return true;
        }
        return  false;
    }

    public static void main(String[] args) {
        Race race = new Race();                         //开启多线程
        new Thread(race,"兔子").start();           //在Thread中传入Runable并调用start方法
        new Thread(race,"乌龟").start();
    }
}
上一篇:Thread常用方法


下一篇:匿名内部类与Lambda表达式的多线程代码对比,谁更简便