//表示生产者消费者交互的容器 public class MilkBox { public static int bottles = 0; } //消费者 public class Consumer implements Runnable { private String lock = ""; public Consumer(String lock) { this.lock = lock; } @Override public void run() { synchronized (lock){ //表示获取到lock对象的锁 while(true){ if(MilkBox.bottles == 0){ try { lock.wait(); //释放掉lock对象的锁,进入阻塞队列 } catch (InterruptedException e) { e.printStackTrace(); } } MilkBox.bottles --; System.out.println("消费者消费之后,奶瓶数量为:" + MilkBox.bottles); lock.notify(); //通知其他阻塞的线程获得锁 } } } } //生产者 public class Producer implements Runnable { private String lock = ""; public Producer(String lock){ this.lock = lock; } @Override public void run() { synchronized (lock){ while(true){ if(MilkBox.bottles > 0){ try { lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } MilkBox.bottles ++; System.out.println("生产者生产后,奶瓶的数量为:" + MilkBox.bottles); lock.notify(); } } } }
//测试
public class Test {
public static void main(String[] args) {
String lock = "";
new Thread(new Consumer(lock)).start();
new Thread(new Producer(lock)).start();
}
}