我们经常使用的handler message队列就是一个生产者消费者 模式,
// 产品 static class ProductObject { // volatile 线程操作变量可见 public volatile static String value; } public static void main(String[] args) { Object lock = new Object(); new Producer(lock).start(); new Consumer(lock).start(); } // 生产者线程 static class Producer extends Thread { Object lock; public Producer(Object lock) { this.lock = lock; } @Override public void run() { // 不断生产产品 while (true) { synchronized (lock) { // 互斥锁 // 产品还没有被消费 if (ProductObject.value != null) { try { // 等待,阻塞 lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } // 产品已经消费完成,生成新的产品 ProductObject.value = "NO:" + System.currentTimeMillis(); System.out.println("生产产品:" + ProductObject.value); lock.notify();// 生产完成,通知消费者进行消费 } } } } // 消费者线程 static class Consumer extends Thread { Object lock; public Consumer(Object lock) { this.lock = lock; } @Override public void run() { while (true) { synchronized (lock) { // 互斥锁 // 没有产品可以消费等待 if (ProductObject.value == null) { try { // 等待,阻塞 lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("消费产品:" + ProductObject.value); ProductObject.value = null; lock.notify(); // 消费完成,通知生产者继续生产 } } } }