shaokel 2019-06-11 16:34 采纳率: 95.2%
浏览 185
已采纳

请求大佬支援!!这个id是怎么获取数值的,馒头的那个类都没有给id赋值?

container.pop().id 是怎么获取数值的?谢谢在座的帮助!!!

package com.sxt.cooperation;

//协作模式:生产者消费者实现方式一:管程法
//借助缓冲区
public class CoTest01 {
    public static void main(String[] args) {
        SynContainer container = new SynContainer();
        new Productor(container).start();
        new Consumer(container).start();
    }
}

//生产者
class Productor extends Thread {
    SynContainer container;

    public Productor(SynContainer container) {
        super();
        this.container = container;
    }

    public void run() {
        // 生产
        for (int i = 0; i < 100; i++) {
            System.out.println("生产-->" + i + "个馒头");
            container.push(new Steamedbun(i));
        }
    }
}

//消费者
class Consumer extends Thread {
    SynContainer container;

    public Consumer(SynContainer container) {
        super();
        this.container = container;
    }

    public void run() {
        // 消费
        for (int i = 0; i < 100; i++) {
            System.out.println("消费-->" + container.pop().id + "个馒头");
        }
    }
}

//缓冲区
class SynContainer {
    Steamedbun buns[] = new Steamedbun[10];// 存储容器
    int count = 0;// 计数器

    // 存储生产
    public synchronized void push(Steamedbun bun) {
        //何时能生产   容器存在空间
        //不能生产   只能等待 
        if(count==buns.length) {
            try {
                this.wait();//线程堵塞   消费者通知     生成解除
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        //存在空间    可以生产 

        buns[count] = bun;
        count++;
        //存在数据   可以通知消费
        this.notifyAll();
    }

    // 获取消费
    public synchronized Steamedbun pop() {
        //何时消费  容器中是否存在数据
        //没有数据  只有等待
        if(count==0) {
            try {
                this.wait();//线程堵塞   生产者通知     消费解除
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        //存在数据即可消费 

        count--;
        Steamedbun bun = buns[count];// 拿最后一个
        this.notifyAll();//存在空间,可以唤醒对方生产
        return bun;
    }
}

//馒头
class Steamedbun {
    protected int id;

    public Steamedbun(int id) {
        super();
        this.id = id;
    }
}
  • 写回答

1条回答 默认 最新

  • 关注

    馒头类的id是通过构造方法赋值的,在生产者生产的时候,new 的时候。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用