演员与观众
package com.jirong.gaoji;
public class SignTest {
public static void main(String[] args) {
Tv tv = new Tv();
Player player = new Player(tv);
Watcher watcher = new Watcher(tv);
player.start();
watcher.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++) {
this.tv.watch();
}
}
}
//产品----》节目
class Tv{
// 演员表演,观众等待
// 观众观看,演员等待
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;
}
}