Container类
package multithread.producerandconsumer;
public class Container {
static int size=5;
int index=0;
String [] container=new String[size];
synchronized public void add(String production){
if(index>=size){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
container[index]=production;
System.out.println("P-"+Thread.currentThread().getName()+" produce "+container[index]+" production");
index++;
notify();
}
synchronized public void remove(){
if(index==0){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
index--;
System.out.println("C-"+Thread.currentThread().getName()+" consume "+container[index]+" production");
container[index]=null;
notify();
}
}
Producer类
package multithread.producerandconsumer;
public class Producer implements Runnable {
Container container=null;
Producer(Container container){
this.container=container;
}
@Override
public void run() {
long proId=0;
while(true){
proId++;
container.add(proId+"NO.");
if(proId==10)
break;
}
}
}
Consumer类
package multithread.producerandconsumer;
public class Consumer implements Runnable {
Container container=null;
Consumer(Container container){
this.container=container;
}
@Override
public void run() {
for(int i=0;i<10;i++){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
container.remove();
}
}
}
测试类
package multithread.producerandconsumer;
public class TestProduceAndConsume {
public static void main(String[] args) {
Container container=new Container();
Producer prod=new Producer(container);
Consumer consumer=new Consumer(container);
new Thread(prod).start();
new Thread(consumer).start();
// new Thread(consumer).start();
// new Thread(consumer).start();
}
}