通过synchornized调度的生产者消费者模型
1、控制台输出
......
2、关键点
- 线程wait和notify的时机
- 对象锁调用wait后,之前的锁owner在下一次竞争中拿到锁的几率
3、源码
public class SynchronizedTest { private LinkedList<Integer> list = new LinkedList<Integer>(); private int max = 10; public void test(){ Producer producer = new Producer(); Consumer consumer = new Consumer(); consumer.start(); producer.start(); } public static void main(String[] args) throws Exception { SynchronizedTest ins = new SynchronizedTest(); ins.test(); } class Producer extends Thread { public void run() { while (true) { synchronized (list) { while (list.size() >= max) { try { list.wait(); } catch (Exception e) { e.printStackTrace(); } } list.add(new Integer(0)); System.out.println("Producer add,current size="+list.size()); list.notify(); } } } }//Producer-end class Consumer extends Thread { public void run() { while (true) { synchronized (list) { while (list.size() == 0) { try { list.wait(); } catch (Exception e) { e.printStackTrace(); } } list.removeLast(); System.out.println("consumer remove,current size="+list.size()); list.notify(); } } } }//Consumer-end }// end