生产者和消费者同时进行,但消费者必须等待生产者生产出了产品才能进行消费。所以当消费者需要消费的物资为不足时,需要等待,等到生产者生产出了该产品在唤醒消费者的等待机制。
import java.util.*;
public class Producer implements Runnable{
public List<Integer> list=null;
public Producer(List list){
this.list=list;
}
public void run(){
int i=0;
//生产十个
while(i<10){
synchronized(list){
list.add(++i);
System.out.println("生产出了:"+i);
list.notify();
}
}
}
}
import java.util.List;
public class Customer extends Thread{
private List<Integer> list=null;
public Customer(List list){
this.list=list;
}
public void run(){
int i=0;
while(i!=10)
synchronized(list){
if(list.size()==0){
try {
list.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Integer temp=list.get(list.size()-1);
System.out.println("消费:"+temp);
list.remove(temp);
}
}
}
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args){
List<Integer> list=new ArrayList<Integer>();
Producer p=new Producer(list);
Thread t=new Thread(p);//实现了Runnable接口
Customer c=new Customer(list);
System.out.println("开始:");
c.start();
t.start();
}
}
测试结果:
开始:生产出了:1
生产出了:2
生产出了:3
生产出了:4
生产出了:5
生产出了:6
生产出了:7
生产出了:8
消费:8
消费:7
生产出了:9
生产出了:10
消费:10
消费:9
消费:6
消费:5
消费:4
消费:3
消费:2
消费:1