首页 > 其他分享 >题目:生产消费问题

题目:生产消费问题

时间:2022-10-09 09:58:46浏览次数:43  
标签:Product 消费 题目 String void brand 生产 public name

题目:

方法1:(有问题)
package com.gao.Project.Pro9;

public class Product {//商品类
    //品牌
    private String brand;
    //名字
    private String name;

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

package com.gao.Project.Pro9;

public class PuoducerThread extends Thread{ //生产者线程
    //共享商品
    private Product p ;
    //构造器
    public PuoducerThread(Product p) {
        this.p = p;
    }

    @Override
    public void run() {
        for (int i = 1; i <= 10 ; i++) {//生产10个商品   i--->生产次数
            synchronized (p){
                if(i%2 == 0){
                    //生成费列罗巧克力
                    p.setBrand("费列罗");
                    p.setName("巧克力");
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                }else {
                    //生产哈尔滨啤酒
                    p.setBrand("哈尔滨");
                    p.setName("啤酒");
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                }
            }
            //将生产的产品打印出来
            System.out.println("生产者生产了"+p.getBrand()+"---"+p.getName());
        }
    }
}

package com.gao.Project.Pro9;

public class CustomerThread extends Thread{//消费者线程
    //共享商品
    private Product p;

    public CustomerThread(Product p) {
        this.p = p;
    }

    @Override
    public void run() {
        for (int i = 1; i <=10 ; i++) {// 消费次数
           synchronized (p){//用同一个锁锁住,解决同步问题-->防止数据错乱--->费列罗啤酒,哈尔滨巧克力
               System.out.println("消费者消费了"+p.getBrand()+"---"+p.getName());
           }
        }
    }
}

package com.gao.Project.Pro9;

public class Test {
    public static void main(String[] args) {
        //共享的商品
        Product p = new Product();
        //创建生产者和消费者线程
        PuoducerThread pt = new PuoducerThread(p);
        CustomerThread ct = new CustomerThread(p);
        pt.start();
        ct.start();
    }
}

方法2:(同步)
package com.gao.Project.Pro10;

public class PuoducerThread extends Thread{ //生产者线程
    //共享商品
    private Product p ;
    //构造器
    public PuoducerThread(Product p) {
        this.p = p;
    }

    @Override
    public void run() {
        for (int i = 1; i <= 10 ; i++) {//生产10个商品   i--->生产次数
            if(i % 2 == 0){
                p.setProduct("费列罗","巧克力");
            }else {
                p.setProduct("哈尔滨","啤酒");

            }

        }
    }
}

package com.gao.Project.Pro10;

public class CustomerThread extends Thread{//消费者线程
    //共享商品
    private Product p;

    public CustomerThread(Product p) {
        this.p = p;
    }

    @Override
    public void run() {
        for (int i = 1; i <=10 ; i++) {// 消费次数
            p.getProduct();
           }
      }
}

package com.gao.Project.Pro10;

public class Product {//商品类
    //品牌
    private String brand;
    //名字
    private String name;

    //引入一个灯    ture:红灯   false:绿灯
    boolean flag = false;  //默认情况没有商品,生产者得生产了之后才能消费

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


    //生产商品
    public synchronized void setProduct(String brand,String name){
        if(flag == true){//灯是红的,证明有商品,生产者不生产,等待消费者消费
            try {
                wait();  //出现异常,用try catch 捕获
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
        //灯是绿的,证明没有商品,就生产
            this.setBrand(brand);
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            this.setName(name);

        //将生产的产品打印出来
        System.out.println("生产者生产了"+this.getBrand()+"---"+this.getName());

        //生产完以后,灯变色
        flag = true;
        //告诉消费者来消费
        notify();
    }

    //消费商品
    public synchronized void getProduct (){
        if(!flag){//(flag == false) 灯是绿的,证明没有商品,消费者需要等待
            try {
                wait();
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
        //灯是红的,证明有商品,可以消费
        System.out.println("消费者消费了"+this.getBrand()+"---"+this.getName());
        //消费完,灯变色
        flag = false;
        //告诉生产者赶紧生产
        notify();
    }
}

package com.gao.Project.Pro10;

public class Test {
    public static void main(String[] args) {
        //共享的商品
        Product p = new Product();
        //创建生产者和消费者线程
        PuoducerThread pt = new PuoducerThread(p);
        CustomerThread ct = new CustomerThread(p);
        pt.start();
        ct.start();
    }
}

标签:Product,消费,题目,String,void,brand,生产,public,name
From: https://www.cnblogs.com/gaoxiaocuo/p/16771080.html

相关文章

  • kafka消费者学习
    转自:https://www.cnblogs.com/cxuanBlog/p/11949238.html1.介绍  Kafka消费者从属于消费者群组。一个群组中的消费者订阅的都是相同的主题,每个消费者接收主题一部分分......
  • 贤鱼的刷题日常--P1023 [NOIP2000 普及组] 税收与补贴问题--题目详解
    >......
  • 10.6题目大赏
    2022-10-6T1炼心题目背景\(Cafeiin\)神情认真,专心的听着老师讲话。“既然你已拜入算法门下,我便为你讲讲这算法的修炼之道,算法之道,分几重境界,初入编程,便是普及,普及之上......
  • kafka的生产者学习
    转自:https://www.cnblogs.com/cxuanBlog/p/11949238.html1.流程介绍图1大概流程:创建一个ProducerRecord 对象,它是Kafka中的一个核心类,由记录要发送到的主题名称(T......
  • 使用EF Core更新与修改生产数据库
    使用EFCore的CodeFirst,在设计阶段,直接使用Database.EnsureCreated()和EnsureDeleted()可以快速删除、更新最新的数据结构。由于没有什么数据,删除的风险非常低。但是对于......
  • 题目:买火车票
    窗口抢票简单实现packagecom.gao.Project.Pro7;publicclassBuyTicketThreadextendsThread{//有参构造器publicBuyTicketThread(Stringname){......
  • Kafka教程(二)API开发-生产者、消费者、topic
    一、地址1、实时更新的思维导图​​https://www.mubucm.com/doc/4uqlpedefuj​​2、图片二、具体内容5.producer生产者demo发送pro.send(newProducerRecord<String,String>......
  • 为啥德国生产墨镜能卖上好几千? ——让人发指的精确度
    看完刀具,咱们再来说下墨镜德国生产的眼镜架线条硬朗具有高弹性、强韧度和轻巧贴面的特点配上多道工序制成的镜片又犹如一件艺术品不信,来看下他们对于生产的把控第一步:原料准......
  • 题目:披萨商店
    题目:普通实现:packagecom.gao.Project.Pro2;publicclassPizza{//父类:共同的属性:名称,大小,价格//共同的方法:展示披萨的信息//属性:privat......
  • 国产最好用的操作系统——deepin,为什么不适合生产环境
    前几天看了罗永浩的视频,他推荐了一本Intel创始人的书,看了这本书后想到书中大谈Intel和Microsoft的合作才创建下了今天的PC世界。看到这我就有些不爽了,现在美国各种控制和制......