Linux安全网 - Linux操作系统_Linux 命令_Linux教程_Linux黑客

会员投稿 投稿指南 本期推荐:
搜索:
您的位置: Linux安全网 > Linux集群 > Architecture > » 正文

java多线程总结六:经典生产者消费者问题实现(2)

来源: 未知 分享至:
setName(String name) {
  • this.name = name;
  • }
  • }
  • /**
  • *仓库
  • */
  • class Storage {
  • // 仓库容量为10
  • private Product[] products = new Product[10];
  • private int top = 0;
  • // 生产者往仓库中放入产品
  • public synchronized void push(Product product) {
  • while (top == products.length) {
  • try {
  • wait();//仓库已满,等待
  • } catch (InterruptedException e) {
  • // TODO Auto-generated catch block
  • e.printStackTrace();
  • }
  • }
  • //把产品放入仓库
  • products[top++] = product;
  • System.out.println(Thread.currentThread().getName() + \" 生产了产品\"
  • + product);
  • notifyAll();//唤醒等待线程
  • }
  • // 消费者从仓库中取出产品
  • public synchronized Product pop() {
  • while (top == 0) {
  • try {
  • wait();//仓库空,等待
  • } catch (InterruptedException e) {
  • // TODO Auto-generated catch block
  • e.printStackTrace();
  • }
  • }
  • //从仓库中取产品
  • --top;
  • Product p = new Product(products[top].getId(), products[top].getName());
  • products[top] = null;
  • System.out.println(Thread.currentThread().getName() + \" 消费了产品\" + p);
  • notifyAll();//唤醒等待线程
  • return p;
  • }
  • }
  • </span>

  • 运行结果:

    生产者 生产了产品(产品ID:010435111 产品名称:电话)
    消费者 消费了产品(产品ID:010435111 产品名称:电话)


    Tags:
    分享至:
    最新图文资讯
    1 2 3 4 5 6
    验证码:点击我更换图片 理智评论文明上网,拒绝恶意谩骂 用户名:
    关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 发展历史