生产者生产面包,消费者消费面包,当生产者生产到MAX个时,等待消费者消费,消费者没面包消费时,等待生产者生产,只有有面包,消费者就希望消费,但消费者食量有限,等到消费者消费到25个面包时,就不消费了,生产者生产到MAX个面包后,也停止了劳动!
package jk2; import java.util.LinkedList; import java.util.Queue; public class SynThreadTest { /** * @param args * @author jake20001@126.com */ public static void main(String[] args) { // TODO Auto-generated method stub int MAX=10; Queue<Object> q = new LinkedList<Object>(); Producer p = new Producer(q,MAX); Consumer c = new Consumer(q,p); p.start(); c.start(); } } class Producer extends Thread { Queue<Object> q ; int total; int i = 0; Producer(Queue<Object> q,int total){ this.q = q; this.total = total; } public void run(){ while(true){ synchronized(q){ while(q.size()==total){ System.out.println("Producer is full!"); try { q.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } i++; Object b = new Bread(i); if(q.add(b)){ System.out.println("Producer is processing! " + b.toString()); q.notify(); try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } } } } } } class Consumer extends Thread { Queue<Object> q; Producer pr; Consumer(Queue<Object> q,Producer pr){ this.q = q; this.pr = pr; } public void run(){ while(true){ synchronized(q){ while(q.size()==0){ System.out.println("Consumer is waiting for products! "); try { q.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } if(q.size()>0){ /*System.out.println("================" + pr.i); if(pr.i >= 25){ System.out.println("You eat too much!Stop!"); return; }*/ Object rb= q.remove(); System.out.println("Consumer is consuming products! " + rb.toString()); if(((Bread) rb).getNumber()==25){ System.out.println("精确控制到消费者的消费量,然后生产者生产到规定的最大量就等待!"); System.out.println("You eat too much!Stop!"); return; } q.notify(); try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } } } } } } class Bread{ int number; public Bread(int n) { number = n; } public int getNumber() { return number; } public void setNumber(int number) { this.number = number; } public String toString(){ return "第 " + number + " 个 面包!"; } }
输出:
Producer is processing! 第 1 个 面包!
Consumer is consuming products! 第 1 个 面包!
Consumer is waiting for products!
Producer is processing! 第 2 个 面包!
Producer is processing! 第 3 个 面包!
Producer is processing! 第 4 个 面包!
Producer is processing! 第 5 个 面包!
Producer is processing! 第 6 个 面包!
Producer is processing! 第 7 个 面包!
Producer is processing! 第 8 个 面包!
Consumer is consuming products! 第 2 个 面包!
Consumer is consuming products! 第 3 个 面包!
Consumer is consuming products! 第 4 个 面包!
Consumer is consuming products! 第 5 个 面包!
Producer is processing! 第 9 个 面包!
Producer is processing! 第 10 个 面包!
Producer is processing! 第 11 个 面包!
Producer is processing! 第 12 个 面包!
Producer is processing! 第 13 个 面包!
Producer is processing! 第 14 个 面包!
Producer is processing! 第 15 个 面包!
Producer is full!
Consumer is consuming products! 第 6 个 面包!
Consumer is consuming products! 第 7 个 面包!
Consumer is consuming products! 第 8 个 面包!
Producer is processing! 第 16 个 面包!
Producer is processing! 第 17 个 面包!
Consumer is consuming products! 第 9 个 面包!
Consumer is consuming products! 第 10 个 面包!
Consumer is consuming products! 第 11 个 面包!
Consumer is consuming products! 第 12 个 面包!
Consumer is consuming products! 第 13 个 面包!
Consumer is consuming products! 第 14 个 面包!
Consumer is consuming products! 第 15 个 面包!
Consumer is consuming products! 第 16 个 面包!
Producer is processing! 第 18 个 面包!
Producer is processing! 第 19 个 面包!
Consumer is consuming products! 第 17 个 面包!
Producer is processing! 第 20 个 面包!
Consumer is consuming products! 第 18 个 面包!
Consumer is consuming products! 第 19 个 面包!
Consumer is consuming products! 第 20 个 面包!
Consumer is waiting for products!
Producer is processing! 第 21 个 面包!
Producer is processing! 第 22 个 面包!
Producer is processing! 第 23 个 面包!
Producer is processing! 第 24 个 面包!
Producer is processing! 第 25 个 面包!
Producer is processing! 第 26 个 面包!
Producer is processing! 第 27 个 面包!
Producer is processing! 第 28 个 面包!
Producer is processing! 第 29 个 面包!
Producer is processing! 第 30 个 面包!
Producer is full!
Consumer is consuming products! 第 21 个 面包!
Consumer is consuming products! 第 22 个 面包!
Consumer is consuming products! 第 23 个 面包!
Consumer is consuming products! 第 24 个 面包!
Consumer is consuming products! 第 25 个 面包!
精确控制到消费者的消费量,然后生产者生产到规定的最大量就等待!
You eat too much!Stop!
Producer is processing! 第 31 个 面包!
Producer is processing! 第 32 个 面包!
Producer is processing! 第 33 个 面包!
Producer is processing! 第 34 个 面包!
Producer is processing! 第 35 个 面包!
Producer is full!