Java生产者消费者之信号灯法
package Thread ;
public class TestPC2 {
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;
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;
}
}