生产消费者模型---标志法

生产者消费者模型——标志法

package Thread;
//测试生产者消费者问题2:信号灯发,标志位解决
public class PC2Thread {
  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.play("演员表演中");
  }else {
      this.tv.play("插播广告");
  }
}
}
}
//消费者———》观众
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.watch();
      }
  }
}

//产品——》节目
class TV{
  //演员表演,观众等待 T
  //观众观看,演员等待 F
  String voice;//表演的节目
  boolean flag = true;
  //表演
  public synchronized void play(String voice){
      if (!flag){
          try {
              this.wait();
          } catch (InterruptedException e) {
              e.printStackTrace();
          }
      }
      System.out.println("演员表演了:"+voice);
      //通知观众观看
      this.notifyAll();
      this.voice = voice;
      this.flag = !this.flag;
  }
public synchronized void watch(){
      if(flag){
          try {
              this.wait();
          } catch (InterruptedException e) {
              e.printStackTrace();
          }
      }
  System.out.println("观看了:"+voice);
      //通知演员表演
  this.notifyAll();
  this.flag = !this.flag;
}
}

 

posted @ 2020-12-22 16:08  QIDream  阅读(71)  评论(0)    收藏  举报