生产者生产面包,消费者消费面包,当生产者生产到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!