启动3个线程打印递增的数字, 线程1先打印1,2,3,4,5, 然后是线程2打印6,7,8,9,10, 然后是线程3打印11,12,13,14,15. 接着再由线程1打印16,17,18,19,20.

/*
启动3个线程打印递增的数字, 线程1先打印1,2,3,4,5, 然后是线程2打印6,7,8,9,10,
然后是线程3打印11,12,13,14,15. 接着再由线程1打印16,17,18,19,20....以此类推, 直到打印到75
 */
public class Work2 {
    public static void main(String[] args) {
        //创建打印器类
        Print p = new Print();
        Thread t1 = new Thread(new print1Thread(p),"线程1");
        Thread t2 = new Thread(new print2Thread(p),"线程2");
        Thread t3 = new Thread(new print3Thread(p),"线程3");
        t1.start();
        t2.start();
        t3.start();
    }
}
//打印器类,此类为线程共享资源
class Print {
    //共享打印边界
    int printNum = 1;
    //定义切换线程的标记,1,2,3循环控制线程切换
    int flag = 1;

    public synchronized void print1() {
        while (printNum < 76) {
            if (flag == 1) {
                for (int i = 0; i <5 ; i++) {
                    System.out.println(Thread.currentThread().getName()+"--->"+printNum);
                    printNum++;
                }
                flag = 2;
                notifyAll();
            }else {
                try {
                    wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    public synchronized void print2() {
        while (printNum < 76) {
            if (flag == 2) {
                for (int i = 0; i <5 ; i++) {
                    System.out.println(Thread.currentThread().getName()+"--->"+printNum);
                    printNum++;
                }
                flag = 3 ;
                notifyAll();
            }else {
                try {
                    wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    public synchronized void print3() {
        while (printNum < 76) {
            if (flag == 3) {
                for (int i = 0; i <5 ; i++) {
                    System.out.println(Thread.currentThread().getName()+"--->"+printNum);
                    printNum++;
                }
                flag = 1 ;
                notifyAll();
            }else {
                try {
                    wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
//线程1只调用第一打印方法
class print1Thread implements Runnable{
    Print print;

    public print1Thread(Print print) {
        this.print = print;
    }

    @Override
    public void run() {
        print.print1();
    }
}
//线程2只调用第二打印方法
class print2Thread implements Runnable{
    Print print;

    public print2Thread(Print print) {
        this.print = print;
    }

    @Override
    public void run() {
        print.print2();
    }
}
//线程3只调用第三打印方法
class print3Thread implements Runnable{
    Print print;

    public print3Thread(Print print) {
        this.print = print;
    }

    @Override
    public void run() {
        print.print3();
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值