Java学习——多线程经典案例之龟兔赛跑

Java学习——多线程经典案例之龟兔赛跑

我们在学习了多线程之后,来看一个案例深入了解多线程,体会一下多线程。

代码如下:

/**
 * 多线程经典案例:模拟龟兔赛跑
 */
public class ThreadRace implements Runnable{
    //定义胜利者
    private String winner;

    @Override
    public void run() {
        for (int step=1; step<=100; step++) {
            //判断线程是不是兔子,如果是,让它每20步睡一觉,异常捕获处理
            if (Thread.currentThread().getName().equals("小白兔") && step%20==0){
                try {
                    Thread.sleep(50);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    System.out.println("run方法内部异常");
                }
            }
            //写一个获取标记为的方法,传入步数
            boolean flag = getFlag(step);
            //如果有胜利者了,则比赛结束,break跳出循环
            if (flag){
                break;
            }
            //输出谁跑了多少步
            System.out.println(Thread.currentThread().getName()+"跑了"+step+"步");
        }
    }

    private boolean getFlag(int step) {
        //判断有没有胜利者,如果有,返回true,让循环停止,比赛结束
        if (winner!=null){
            return true;
        }
        //判读如果步数走完了,就结束比赛,并将胜利者的名字赋给winner
        if (step>=100){
            winner=Thread.currentThread().getName();
            System.out.println("游戏结束");
            System.out.println("胜利者是:"+winner);
            return true;
        }
        return false;
    }

    //主线程
    public static void main(String[] args) {
        //获取比赛的对象
        ThreadRace race = new ThreadRace();
        //开启线程,并给线程取名字
        new Thread(race,"乌龟").start();
        new Thread(race,"小白兔").start();
    }
}

输出结果:

	乌龟跑了1步
	小白兔跑了1步
	小白兔跑了2步
	小白兔跑了3步
	小白兔跑了4步
	小白兔跑了5步
	小白兔跑了6步
	小白兔跑了7步
	小白兔跑了8步
	小白兔跑了9步
	小白兔跑了10步
	小白兔跑了11步
	小白兔跑了12步
	小白兔跑了13步
	小白兔跑了14步
	小白兔跑了15步
	小白兔跑了16步
	小白兔跑了17步
	小白兔跑了18步
	小白兔跑了19步
	乌龟跑了2步
	乌龟跑了3步
	乌龟跑了4步
	乌龟跑了5步
	乌龟跑了6步
	乌龟跑了7步
	乌龟跑了8步
	乌龟跑了9步
	乌龟跑了10步
	乌龟跑了11步
	乌龟跑了12步
	乌龟跑了13步
	乌龟跑了14步
	乌龟跑了15步
	乌龟跑了16步
	乌龟跑了17步
	乌龟跑了18步
	乌龟跑了19步
	乌龟跑了20步
	乌龟跑了21步
	乌龟跑了22步
	乌龟跑了23步
	乌龟跑了24步
	乌龟跑了25步
	乌龟跑了26步
	乌龟跑了27步
	乌龟跑了28步
	乌龟跑了29步
	乌龟跑了30步
	乌龟跑了31步
	乌龟跑了32步
	乌龟跑了33步
	乌龟跑了34步
	乌龟跑了35步
	乌龟跑了36步
	乌龟跑了37步
	乌龟跑了38步
	乌龟跑了39步
	乌龟跑了40步
	乌龟跑了41步
	乌龟跑了42步
	乌龟跑了43步
	乌龟跑了44步
	乌龟跑了45步
	乌龟跑了46步
	乌龟跑了47步
	乌龟跑了48步
	乌龟跑了49步
	乌龟跑了50步
	乌龟跑了51步
	乌龟跑了52步
	乌龟跑了53步
	乌龟跑了54步
	乌龟跑了55步
	乌龟跑了56步
	乌龟跑了57步
	乌龟跑了58步
	乌龟跑了59步
	乌龟跑了60步
	乌龟跑了61步
	乌龟跑了62步
	乌龟跑了63步
	乌龟跑了64步
	乌龟跑了65步
	乌龟跑了66步
	乌龟跑了67步
	乌龟跑了68步
	乌龟跑了69步
	乌龟跑了70步
	乌龟跑了71步
	乌龟跑了72步
	乌龟跑了73步
	乌龟跑了74步
	乌龟跑了75步
	乌龟跑了76步
	乌龟跑了77步
	乌龟跑了78步
	乌龟跑了79步
	乌龟跑了80步
	乌龟跑了81步
	乌龟跑了82步
	乌龟跑了83步
	乌龟跑了84步
	乌龟跑了85步
	乌龟跑了86步
	乌龟跑了87步
	乌龟跑了88步
	乌龟跑了89步
	乌龟跑了90步
	乌龟跑了91步
	乌龟跑了92步
	乌龟跑了93步
	乌龟跑了94步
	乌龟跑了95步
	乌龟跑了96步
	乌龟跑了97步
	乌龟跑了98步
	乌龟跑了99步
	游戏结束
	胜利者是:乌龟

注意:每次运行的结果可能不一样,可以多运行几次感受一下。这里让兔子每20步睡50ms,提高了乌龟赢得比赛的概率,但是也不是绝对的。最后还是看cpu的心情…看cpu会将时间片给哪个线程

你可能感兴趣的:(Java基础)