多線程實現——新龜兔賽跑


龜兔賽跑新規:


 

  規則:龜兔同時起步,每10毫秒秒跑1米,終點為100米,兔子跑步的能力強,烏龜跑步的能力弱

  途中: 1.兔子跑到10米的時候,謙讓烏龜一下,接着跑
      2.兔子跑到50米的時候,再讓龜1毫秒,接着跑
      3.兔子跑到80米的時候,睡了50毫秒,接着跑

  分析: 兔子跑步的能力強,烏龜跑步的能力弱(優先級的設置)

      1.兔子跑到10米的時候,謙讓烏龜一下,接着跑(yield方法)
      2.兔子跑到50米的時候,再讓龜1毫秒,接着跑(sleep方法)
      3.兔子跑到80米的時候,睡了50毫秒,接着跑(sleep方法)

      4.烏龜全程沒有停留

實現代碼:

1.烏龜類——>>烏龜一直跑

public class Tortoise implements Runnable{
    @Override
    public void run() {
        // TODO Auto-generated method stub
        for (int i = 1; i <=100; i++) {
            try {
                //每隔10毫秒跑一次,全程一直跑
                Thread.sleep(10);
                System.out.println(Thread.currentThread().getName()+"跑了"+i+"米");
            } catch (Exception e) {
                // TODO: handle exception
            }
        }
    }
}

2.兔子類——>>兔子在途中休息了三次

public class Rabbit implements Runnable{
    @Override
    public void run() {
        try {
            for (int i = 1; i <=100; i++) {
                //每隔10毫秒跑一次
                Thread.sleep(10);
                System.out.println(Thread.currentThread().getName()+"跑了"+i+"米");
                //兔子跑到10米的時候,謙讓烏龜一下,接着跑
                if(i==10){
                    System.out.println("==============兔子跑到10米的時候,謙讓烏龜一下,接着跑=============");
                    //讓步,進入就緒狀態
                    Thread.yield();
                }
                //兔子跑到50米的時候,再讓龜1毫秒,接着跑
                if(i==50){
                    System.out.println("==============兔子跑到50米的時候,再讓龜1毫秒,接着跑=============");
                    //休眠,進入阻塞狀態
                    Thread.sleep(1);
                }
                //兔子跑到80米的時候,睡了50毫秒,接着跑
                if(i==80){
                    System.out.println("==============兔子跑到80米的時候,睡了10毫秒,接着跑=============");
                    Thread.sleep(50);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

3.測試類——>>用於創建“烏龜”和“兔子”線程並啟動

public class Test {
    public static void main(String[] args) {
        Thread t1 = new Thread(new Rabbit(),"兔子");//兔子線程
        t1.setPriority(10);//設置級別
        t1.start();//啟動線程
        
        Thread t2 = new Thread(new Tortoise(),"烏龜");//烏龜線程
        t2.setPriority(1);//設置級別
        t2.start();//啟動線程
    }
}

4.龜兔賽跑結果:

......
烏龜跑了9米
兔子跑了10米
=========兔子跑到10米的時候,讓步烏龜一下=========
烏龜跑了10米
兔子跑了11米
......
烏龜跑了49米
兔子跑了50米
=========兔子跑到50米的時候,休息1毫秒=========
烏龜跑了50米
烏龜跑了51米
......
烏龜跑了79米
兔子跑了80米
=========兔子跑到80米的時候,休眠50毫秒=========
烏龜跑了80米
烏龜跑了81米
......
兔子跑了95米
烏龜跑了100米
兔子跑了96米
兔子跑了97米
兔子跑了98米
兔子跑了99米
兔子跑了100米

沒錯,烏龜先跑完了100米,烏龜贏了!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM