多线程的实例之龟兔赛跑

  龟兔赛跑我们可以看成两个线程并发执行,我们可以通过让其中一个线程 “睡觉” 来实现 “操盘”,下面让我们看一下代码如何实现:

public class TestThread implements Runnable{
          
   
    static String winner;
@Override
    public void run(){
          
   
      //定义一条“跑道”
        for (int i = 1; i <= 1000; i++) {
          
   
            //让兔子睡觉的条件
            if(i%500==0&&Thread.currentThread().getName().equals("兔子")){
          
   
                try {
          
   
                    Thread.sleep(10);
                } catch (InterruptedException e) {
          
   
                    e.printStackTrace();
                }
            }
            boolean flag = gameOver(i);
            if(flag){
          
   
                break;
            }
            System.out.println(Thread.currentThread().getName()+"跑了"+i+"步");
        }
    }
//定义一个方法判断是否已经产生了冠军
    private boolean gameOver(int step) {
          
   
        if(winner!=null){
          
   
            return true;
        }if (step>=1000){
          
   
            winner=Thread.currentThread().getName();
            System.out.println("----Game Over----");
            System.out.println("胜利者是"+winner);
            return true;
        }
            return false;
        
    }

    public static void main(String[] args) {
          
   
        TestThread testThread = new TestThread();
        new Thread(testThread,"兔子").start();
        new Thread(testThread,"乌龟").start();
    }
}

  代码的运行结果为:

  因为中途我们设置的让兔子睡觉,所以,结果是乌龟胜利。

经验分享 程序员 微信小程序 职场和发展