多线程案例-龟兔赛跑


1.要有赛道距离,我和终点越来越近
2.判断比赛是否结束
3.打印出胜利者
4.龟兔赛跑开始
5.模拟兔子睡觉
6.龟赢了
package Threads;

//模拟龟兔赛跑
public class RunQk implements Runnable {
    //胜利者
    private static String winncr;
    public void run(){
        //创建赛道的距离
        for (int i=0;i<=100 ;i++ ){
            //判断,让兔子休息
            if(Thread.currentThread().getName().equals("")&&i%10==0){//当线程名称为兔时且每走10步,就让他休息
                try {
                     Thread.sleep(10);
                } catch(InterruptedException e) {
                    e.printStackTrace();
                } 
            }else{
            //判断比赛是否结束
           boolean flag=gameOver(i);
           if(flag){//flag=true,就结束程序
               break;
           }
            
            System.out.println(Thread.currentThread().getName()+"---->跑了"+i+"");

        }
       
        }
        
    }
    
    
    //判断游戏是否停止
    private boolean gameOver(int sleps){//sleps:步数
        //判断是否有胜利者
        if(winncr!=null){//已经有胜利者
            return true;
        }{
            if(sleps>=100){
                winncr=Thread.currentThread().getName();//如果步数等于100,就得到这个线程的名字
                System.out.println("胜者:"+winncr+"走了"+sleps);
                
                return true;
            }
        }
        //如果上面两个判断都没有执行就代表比赛未结束
        return false;
    }    
    public static void main(String[] args) {
        //创建资源,也相当于是赛道
        RunQk pf=new RunQk();
        //创建两个线程,并命名,然后启动
        new Thread(pf,"").start();
        
    
        new Thread(pf,"").start();//让兔线程延时
         
        
    }
}

相关