求大神幫忙:啓動3個線程打印遞增的數字, 線程1先打印1,2,3,4,5, 而後是線程2打印6,7,8,9,10, 而後是線程3打印11,12,13,14,15. 接着再由線程1打印16,17,...

package com.unit10.HomeWork;public class HomeWork003 {    /**     * 建立三個線程進行分段疊加     * 每一個線程疊加四次     *     */    public static void main(String[] args) {        new Thread(new Add(1)).start();        new Thread(new Add(2)).start();        new Thread(new Add(3)).start();    }}class Add implements Runnable{    //定義一個線程ID    private int threadID;    //須要進行疊加的數字    private static int printNum = 0;    //構造方法獲取thread的ID    public Add(int threadID){        this.threadID = threadID;    }    @Override    public void run() {        //須要疊加的數字小於75繼續疊加        while (printNum  < 75){            //Add.class表示  Add 對象 = new Add();            //Add.class表示Add類的一個不肯定對象            synchronized (Add.class){                System.out.println("當前的線程是:"+"---->"+threadID+"線程");                int index = (printNum/5%3+1);                System.out.println("當前的數字是:"+"---->"+printNum);                System.out.println("當前的指針是:"+"---->"+index);                //線程ID和指針相同時能夠進入疊加for循環                if(index == threadID){                    for ( int i = 0 ; i < 5 ; i++){                        System.out.println("線程"+threadID+":"+(++printNum));                    }                    //執行完畢,喚醒其餘線程                    Add.class.notify();                }else {                    System.out.println("我去換個線程!");                    try {                        Add.class.wait();                        //該線程不和條件,進行等待其餘線程                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                }            }        }    }}
相關文章
相關標籤/搜索