2、主線程子線程輪流運行線程管理實現

編程題目:

2.子線程循環10次,接着主線程循環5次,接着又回到子線程循環10次,接着再回到主線程又循環5次,如此循環50次,請寫出程序。

示例代碼:

package program.thread.exercise02;

/**
 * 2.子線程循環10次,接着主線程循環5次,接着又回到子線程循環10次,接着再回到主線程又循環5次,如此循環50次,請寫出程序。 
 */

public class ThreadManager {
    public static void main(String[] args) {

        Business business = new Business();//創建實例對象

        new Thread(
            new Runnable(){
                public void run() {
                    for(int i=0;i<50;i++){//總循環次數
                        business.subThread(i);
                        business.mainThread(i);
                    }                       
                }
            }
        ).start();
    }
}

//創建事務類
class Business {

    //定義線程執行:true爲子線程執行,false爲主線程執行
    boolean should = true;//這裏相當於定義了控制該誰執行的一個信號燈

    //主線程,注意:主線程和子線程要同步
    public synchronized void mainThread(int i){

        if(should){
            try {
                this.wait();//主線程處在等待狀態

            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        for(int j=0;j<5;j++){ //主線程運行次數
            System.out.println("主線程:i="+i+",j="+j);
        }

        should = true;
        this.notify();//喚醒主線程

    }

    //子線程
    public synchronized void subThread(int i){

        if(!should){
            try {
                this.wait();//子線程處在等待狀態

            } catch (InterruptedException e) {
                e.printStackTrace();
            }   
        }

        for(int j=0;j<10;j++){ //子線程運行次數
            System.out.println("子線程:i="+i+",j="+j);
        }

        should = false;             
        this.notify();//喚醒子線程           
    }
}

結果顯示:

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章