Java多线程同步——生产者消费者问题
2012-04-22 22:50
323 查看
这是马士兵老师的Java视频教程里的一个生产者消费者问题的模型
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) { // TODO Auto-generated catch block e.printStackTrace(); } } this.notify(); arrPro[index] = p; index++; } public synchronized Product pop(){ while (index == 0){ try { this.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } this.notify(); index--; return arrPro[index]; } } class Producer implements Runnable{ SyncStack ss = null; public Producer(SyncStack ss){ //持有SyncStack的一个引用 this.ss = ss; } @Override 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){ //持有SyncStack的一个引用 this.ss = ss; } @Override 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(); } } } }
相关文章推荐
- Java多线程同步——生产者消费者问题
- java多线程同步问题(生产者和消费者)典型例子
- Java多线程同步——生产者消费者问题
- java实现 生产者和消费者问题 多线程同步示例
- java多线程同步:生产者与消费者问题
- java消费者生产者问题
- [转载] Java实现生产者消费者问题
- java中的生产者与消费者问题(多线程)
- Java线程(三):线程协作-生产者/消费者问题
- java利用lock和unlock实现消费者与生产者问题(多线程)
- Java实现生产者消费者问题与读者写者问题详解
- Java生产者消费者问题
- java生产者消费者多线程同步
- java lock await方法会释放掉当前锁 标准的生产者消费者问题
- [Java] Thread-05- 线程同步-生产者与消费者的经典问题
- java多线程(3)生产者消费者问题(二)
- Java多线程的一个案例-生产者消费者问题
- java 生产者 与 消费者 问题
- 哲学家进餐问题与生产者与消费者问题(java实现)
- Java线程之由生产者/消费者问题看线程同步与通信