用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