注意: 表演者表演,观众观看。 利用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;
}
}
}