Goods.java
package com.bebig.producerconsumer;
//商品 public class Goods { private int id;
public Goods(int id) { this.setId(id); }
public void setId(int id) { this.id = id; }
public int getId() { return id; } }
Cart.java
package com.bebig.producerconsumer;
//购物车 public class Cart { private final int MAXVALUE = 6;// 购物车里最多能存放的商品数量 private int index = 0; private Goods[] goods = new Goods[MAXVALUE];
public synchronized void push(String name, Goods g) { while (index == goods.length) { // 购物车里满了就不要放物品进来了 try { System.out.println("----购物车里的商品已满,停止生产."); this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } this.notifyAll(); this.goods[index] = g; index++; System.out.println("生产者" + name + "向购物车里放置了一件商品.");
}
public synchronized Goods pop(String name) { while (0 == index) { // 购物车里空了就不要取物品出去了 try { System.out.println("----购物车里的商品已空,停止消费."); this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } this.notifyAll(); index--; System.out.println("消费者" + name + "从购物车取走了一件商品."); return this.goods[index]; }
}
Producer.java
package com.bebig.producerconsumer;
//生产者 public class Producer implements Runnable { private Cart cart = null; private String name;
public Producer(Cart c, String name) { this.cart = c; this.setName(name); }
@Override public void run() { for (int i = 1; i < 10; i++) { cart.push(this.getName(), new Goods(i)); try { Thread.sleep((int) (Math.random() * 1000)); } catch (InterruptedException e) { e.printStackTrace(); } } }
public void setName(String name) { this.name = name; }
public String getName() { return name; } }
Consumer.java
package com.bebig.producerconsumer;
//消费者 public class Consumer implements Runnable { private Cart cart = null; private String name;
public Consumer(Cart c, String name) { this.name = name; this.cart = c; }
@Override public void run() { for (int i = 1; i < 10; i++) { cart.pop(this.getName()); try { Thread.sleep((int) (Math.random() * 1000)); } catch (InterruptedException e) { e.printStackTrace(); } } }
public void setName(String name) { this.name = name; }
public String getName() { return name; }
}
测试代码:
package com.bebig.producerconsumer;
//测试 public class ProducerAndConsumer {
/** *//** * @param args */ public static void main(String[] args) { Cart c = new Cart();
Producer p1 = new Producer(c, "Don"); Consumer c1 = new Consumer(c, "Scan"); Producer p2 = new Producer(c, "txc"); Consumer c2 = new Consumer(c, "Sun"); new Thread(p1).start(); new Thread(c1).start(); new Thread(p2).start(); new Thread(c2).start();
}
}
测试结果(随机显示):
生产者Don向购物车里放置了一件商品. 生产者txc向购物车里放置了一件商品. 消费者Sun从购物车取走了一件商品. 消费者Scan从购物车取走了一件商品. ----购物车里的商品已空,停止消费. 生产者txc向购物车里放置了一件商品. 消费者Sun从购物车取走了一件商品. ----购物车里的商品已空,停止消费. 生产者txc向购物车里放置了一件商品. 消费者Scan从购物车取走了一件商品. 生产者Don向购物车里放置了一件商品. 生产者Don向购物车里放置了一件商品. 生产者txc向购物车里放置了一件商品. 消费者Sun从购物车取走了一件商品. 消费者Scan从购物车取走了一件商品. 生产者Don向购物车里放置了一件商品. 生产者txc向购物车里放置了一件商品. 消费者Sun从购物车取走了一件商品. 生产者txc向购物车里放置了一件商品. 消费者Scan从购物车取走了一件商品. 生产者txc向购物车里放置了一件商品. 生产者Don向购物车里放置了一件商品. 生产者txc向购物车里放置了一件商品. 消费者Scan从购物车取走了一件商品. 消费者Scan从购物车取走了一件商品. 消费者Sun从购物车取走了一件商品. 生产者Don向购物车里放置了一件商品. 生产者txc向购物车里放置了一件商品. 消费者Sun从购物车取走了一件商品. 消费者Scan从购物车取走了一件商品. 消费者Sun从购物车取走了一件商品. 消费者Scan从购物车取走了一件商品. ----购物车里的商品已空,停止消费. 生产者Don向购物车里放置了一件商品. 消费者Sun从购物车取走了一件商品. ----购物车里的商品已空,停止消费. 生产者Don向购物车里放置了一件商品. 消费者Scan从购物车取走了一件商品. ----购物车里的商品已空,停止消费. 生产者Don向购物车里放置了一件商品. 消费者Sun从购物车取走了一件商品.
|
|
CALENDER
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
---|
27 | 28 | 29 | 30 | 31 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|
常用链接
留言簿
随笔分类
随笔档案
文章分类
文章档案
新闻档案
相册
搜索
最新评论
阅读排行榜
评论排行榜
Powered By: 博客园 模板提供:沪江博客
|