通过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

 

posted @ 2017-04-12 18:57  yanhuaer  阅读(194)  评论(0编辑  收藏  举报