【温习】多线程顺序打印数字

原创
2021/04/12 16:52
阅读数 159

3个线程,分别负责打印3的倍数、5的倍数、其他;要求整体按顺序打印出1~100,不可重复 

public class Test {

    static class Printor {
        int num;//需要打印得数字1~100
        synchronized void print(int printId) throws InterruptedException {
            for(num=1;num<=100;){
                if( (printId==0 && num%3==0) //线程0打印3的倍数:3、6、9
                    || (printId==1 && num%5==0) //线程1打印5的倍数:5、10、15
                    || (printId==2 && num%3!=0 && num%5!=0) //线程2打印其他:1、2、4
                ){
                    System.out.println(num++);
                    notifyAll();
                }else{
                    wait();
                }
            }
        }
    }

    public static void main(String[] args)  {
        Printor printor = new Printor();
        for(int i=0;i<3;i++){
            int printId = i;
            new Thread(()->{
                try {
                    printor.print(printId);
                } catch (InterruptedException e) {
                }
            }).start();
        }
    }

}

 

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部