生产者与消费者Java兑现
生产者与消费者Java实现
Container类
Producer类
Consumer类
测试类
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(); } }