public class BoxDemo {
public static void main ( String[ ] args) {
Box b = new Box ( ) ;
Producer p = new Producer ( b) ;
Customer c = new Customer ( b) ;
Thread t1 = new Thread ( p) ;
Thread t2 = new Thread ( c) ;
t1. start ( ) ;
t2. start ( ) ;
}
}
public class Producer implements Runnable {
private Box b;
public Producer ( Box b) {
this . b = b;
}
@Override
public void run ( ) {
for ( int i = 1 ; i <= 10 ; i++ ) {
b. put ( i) ;
}
}
}
public class Customer implements Runnable {
private Box b;
public Customer ( Box b) {
this . b = b;
}
@Override
public void run ( ) {
while ( true ) {
b. get ( ) ;
}
}
}
public class Box {
private int milk;
private boolean state = false ;
public synchronized void put ( int milk) {
if ( state) {
try {
wait ( ) ;
} catch ( InterruptedException e) {
e. printStackTrace ( ) ;
}
}
this . milk = milk;
System. out. println ( "送奶工将第" + this . milk + "瓶奶放入奶箱" ) ;
state = true ;
notifyAll ( ) ;
}
public synchronized void get ( ) {
if ( ! state) {
try {
wait ( ) ;
} catch ( InterruptedException e) {
e. printStackTrace ( ) ;
}
}
System. out. println ( "用户拿到第" + this . milk + "瓶奶" ) ;
state = false ;
notifyAll ( ) ;
}
}