标签:
生产者与消费者模式简单介绍:
生产者线程生产物品,然后将物品放置在一个空缓冲区中供消费者线程消费。消费者线程从缓冲区中获得物品,然后释放缓冲区。当生产者线程生产物品时,如果没有空缓冲区可用,那么生产者线程必须等待消费者线程释放出一个空缓冲区。当消费者线程消费物品时,如果没有满的缓冲区,那么消费者线程将被阻塞,直到新
public class ProduceConsumer { public static void main(String[] args) { SyncStack ss = new SyncStack(); Producer pro = new Producer(ss); Consumer con = new Consumer(ss); new Thread(pro).start(); new Thread(con).start(); } } class Product{ int id; public Product(int id){ this.id = id; } public String toString(){ return "Product:"+id; } } class SyncStack{ int index = 0; Product[] arrPro = new Product[6]; public synchronized void push(Product p){ while(index == arrPro.length){ try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } this.notify(); arrPro[index] = p; index++; } public synchronized Product pop(){ while(index == 0){ try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } this.notify(); index--; return arrPro[index]; } } class Producer implements Runnable{ SyncStack ss = null; public Producer(SyncStack ss){ this.ss = ss; } public void run(){ for(int i=0; i<20; i++){ Product p = new Product(i); ss.push(p); System.out.println("生产了:"+p); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } } class Consumer implements Runnable{ SyncStack ss = null; public Consumer(SyncStack ss){ this.ss = ss; } public void run(){ for(int i=0; i<20; i++){ Product p = ss.pop(); System.out.println("消费了:"+p); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }
的物品被生产出来
标签:
原文地址:http://www.cnblogs.com/hlongch/p/5727192.html