用Java实现生产者消费者问题

来源:互联网 发布:人脸变漫画软件 编辑:程序博客网 时间:2024/06/07 19:38
package javaTest;//测试类    public class ProCon{     public static void main(String[] args){   SyncQueue queue = new SyncQueue();   Consumer p = new Consumer(queue);   Producer c = new Producer(queue);         new Thread(p).start();   new Thread(c).start();   }   }   //生产者   class Producer implements Runnable{        private SyncQueue queue;       private int count = 0;     public Producer(SyncQueue queue){       this.queue = queue;       }       public void run(){       while(true){       String product = "产品"+count;       queue.put(product);       count++;     System.out.println("生产了: "+product);       try{       Thread.sleep(2000);       }catch(InterruptedException e){       e.printStackTrace();       }      }       }   }  //消费者     class Consumer implements Runnable{       private SyncQueue queue;         public Consumer(SyncQueue queue) {      this.queue = queue;       }            public void run(){      while(true){      String product = queue.get();      System.out.println("消费了: "+product);      try{      Thread.sleep(2000);      }catch(InterruptedException e){      e.printStackTrace();      }      }      }   }   //公共缓冲区  class SyncQueue{   private String[] queue = new String[10];      private int index = 0;      //生产者把产品放入队列    public synchronized void put(String productor){     if(index == queue.length){        try{         wait();        }catch(InterruptedException e){          e.printStackTrace();         }      }    queue[index] = productor;  index++;  //唤醒在此对象监视器上等待的消费者线程  notify();     }      //消费者从队列中取出一个产品消费    public synchronized String get(){         if(index == 0){      try{      wait();      }catch (InterruptedException e){          e.printStackTrace();      }      }index--;  String product = queue[index]; //唤醒在此对象监视器上等待的生产者线程notify();  return product;      }   }  
本文转自:http://blog.csdn.net/fg2006/article/details/6878139

原创粉丝点击