package usi.dbdp.SalesOrder.controller;
public class TestPC2 {
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) {
try {
tv.paly("快乐大本营");
} catch (Exception e) {
e.printStackTrace();
}
}else {
try {
tv.paly("抖音");
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
//观众
class Watcher extends Thread{
TV tv;
public Watcher(TV tv) {
this.tv = tv;
}
@Override
public void run() {
for (int i = 0; i < 20; i++) {
try {
tv.watch();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
//节目
class TV{
String voice;
boolean flag=true;
//表演
public synchronized void paly(String voice) throws Exception {
if (!flag) {
this.wait();
}
System.out.println("演员表演了:"+voice);
//通知观众观看
this.notifyAll();
this.voice=voice;//更新voice的内容
this.flag=!this.flag;//标志位取反
}
//观看
public synchronized void watch() throws Exception {
if (flag) {
this.wait();
}
System.out.println("观看了:"+voice);
this.notifyAll();
this.flag=!this.flag;
}
}
多线程:生产者和消费者模式(信号灯法)
最新推荐文章于 2022-02-17 22:34:53 发布