恬然自得.活在當下: [功課] 撰寫一多執行緒程式,利用實作Runnable來改寫

2011年3月14日 星期一

[功課] 撰寫一多執行緒程式,利用實作Runnable來改寫

話說網誌沉寂太久了@@" 寫文章的時間都被我拿來分配做專題了,我想最近會抽出點時間來打文的,有功課的話還是會照常貼上程式碼,想辦法兼具文章品質和發文頻率XD


貼上執行結果:
Making 1
Making 2
Thread 1(5)
Thread 1(4)
Making 3

Thread 2(5)
Thread 1(3)
Thread 2(4)
Making 4
Thread 3(5)
Thread 3(4)
Thread 3(3)
Thread 1(2)
Thread 1(1)
Thread 4(5)
Thread 3(2)
Making 5
Thread 2(3)
Thread 2(2)
All Threads Started
Thread 5(5)
Thread 3(1)
Thread 4(4)
Thread 5(4)
Thread 2(1)
Thread 5(3)
Thread 4(3)
Thread 5(2)
Thread 4(2)
Thread 5(1)
Thread 4(1)

從這個功課中可看出,多執行緒的執行次數是隨機分配的,所以大家都會輪流執行,出現Makingthread類別被new的時候,呼叫建構子產生的,也相當於那個時候才建立執行緒。

寫法僅供參考,畢竟Java所學淺薄>”<
(大家記得註解和程式碼要自己重新打過唷,工讀生會檢查)


/*11967046  
 * 3/9課程中所教授之SimpleThread.java程式,
 * 利用實作Runnable介面重新改寫之。
 * */

public class s11967046 {
   
    public static void main(String[] args) {
       
        for(int i = 0; i<5; i++){
           
            //new一個thread類別
            thread r1 = new thread();
            //new一個Thread類別,並傳入一個Runnable物件稱r1
            Thread t1 = new Thread(r1);
            //將執行緒丟入Runnable Pool中等待被run方法呼叫
            t1.start();
        }
        System.out.println("All Threads Started");
    }
}

class thread implements Runnable{ //實作Runnable
    private int countDown = 5; //控制執行次數的變數
    private static int threadCount = 0; //計算執行緒已被執行幾次的變數
    private int threadNumber = ++threadCount ; //儲存threadCount變數
   
    //thread建構子,當被呼叫時會執行
    public thread(){
        System.out.println("Making " + threadNumber);
    }
   
    public void run(){
        while(true){
            System.out.println("Thread "
                    + threadNumber + "(" + countDown + ")");
            //若是countDown等於0,結束run方法
            //代表這個執行緒被建立後,迴圈將會跑五次
            if (-- countDown ==0){
                return;
            }
        }
    }
}

2 則留言:

  1. 隊長,我覺得你應該要控制流量
    否則老師遲早會找上你...

    回覆刪除
  2. 話說我的網誌到底有多少人看呀@@" 因為Google那邊幫我統計的其實不多的樣子0.0" 老師應該不會找上來吧XD

    回覆刪除

歡迎提供良性建議^_^