线程二十三—— 观众和表演者的关系

44 篇文章 0 订阅

注意: 表演者表演,观众观看。 利用wait   和notifyall来等待和唤醒。

package com.yyf.Gaoji;

public class TestProducerConsumer2 {
    public static void main(String[] args) {
        TV tv = new TV ();
         new Player (tv).start ();
         new Watcher (tv).start ();
    }
}

class Player extends Thread{
    TV tv;
    public Player(TV tv) {
        this.tv = tv;
    }

    @Override
    public void run() {
        for (int i = 0; i < 20; i++) {
            if (i%2==0){
                this.tv.player ("快乐大本营播放中");
            }else{
                this.tv.player ("抖音记录美好生活");
            }
        }
    }
}

class Watcher extends Thread{
    TV tv;
    public Watcher(TV tv) {
        this.tv = tv;
    }

    @Override
    public void run() {
        for (int i = 0; i < 20; i++) {
            tv.watcher ();
        }
    }
}


class TV {
//       演员表演 观众等待
//     观众观看的时候 演员等待
      String program; //表演的节目
      boolean flag=true;  //利用 flag了来判断表演还是观看

//     表演
    public synchronized void player(String program){
        if (!flag){
            try {
                this.wait ();
            } catch (InterruptedException e) {
                e.printStackTrace ();
            }
        }
        System.out.println ("演员表演了:"+program);
    //     通知观众观看
        this.notifyAll ();

        this.program=program;
        // 如果是假 就为真
        this.flag=!this.flag;
    }

//     观看
    public synchronized void watcher(){
        // 如果为真就是还未表演 观众等待
        if (flag){
            try {
                this.wait ();
            } catch (InterruptedException e) {
                e.printStackTrace ();
            }
            System.out.println ("观众观看了"+this.program);

        //    唤醒 表演者 表演
            this.notifyAll ();
            this.flag= !this.flag;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值