`
阅读更多
package Thread;

public class ProducerConsumer 
{
    
public static void main(String[] args) 
    
{
        SynchronizedStack ss 
= new SynchronizedStack();
        Producer p 
= new Producer(ss); //产生一个生产者
        Consumer c = new Consumer(ss); //产生一个消费者
        new Thread(p).start(); //启动生产者线程
        new Thread(c).start(); //启动消费者线程
        
    }


}


class Bread //定义生产面包
{
    
int id;
    Bread(
int id)
    
{
        
this.id = id;
    }

    
    
public String toString() //重写toString方法
    {
        
return "bread :" + id;
    }

}


class SynchronizedStack //定义一个盛面包的容器
{
    
int index = 0;
    Bread[] bread 
= new Bread[6];
    
    
public synchronized void putIn(Bread bread) // 放进方法
    {
        
while(index == this.bread.length)
        
{
            
try 
            
{
                
this.wait(); // 只针对synchronized
//Object对象的wait()方法,表示调用当前对象的wait()方法,运行当前对象的此方法的线程等待,直到被notify()唤醒
            }
 
            
catch (InterruptedException e) 
            
{
                e.printStackTrace();
            }

        }

        
this.notify(); //唤醒一个wait的线程
//        this.notifyAll();//唤醒所有wait的线程
        this.bread[index] = bread;
        index 
++;
    }

    
    
public synchronized Bread putOut() // 拿出方法
    {
        
while(index == 0)
        
{
            
try 
            
{
                
this.wait();
            }
 
            
catch (InterruptedException e) 
            
{
                e.printStackTrace();
            }

        }

        
this.notify(); //唤醒一个wait的线程
//        this.notifyAll();//唤醒所有wait的线程
        index --;
        
return bread[index];
    }

}


class Producer implements Runnable
{
    SynchronizedStack ss 
= null;
    Producer(SynchronizedStack ss)
    
{
        
this.ss = ss;
    }

    
public void run() 
    
{
        
for(int i=0;i<30;i++)
        
{
            Bread bread 
= new Bread(i);
            ss.putIn(bread);
            System.out.println(
"生产了 :" + bread);
            
try
            
{
//                Thread.sleep(1000);
                Thread.sleep((int)Math.random() * 1000);
            }

            
catch(InterruptedException e)
            
{
                e.printStackTrace();
            }

        }

    }

}


class Consumer implements Runnable
{
    SynchronizedStack ss 
= null;
    Consumer(SynchronizedStack ss)
    
{
        
this.ss = ss;
    }

    
public void run() 
    
{
        
for(int i=0;i<30;i++)
        
{
            Bread bread 
= ss.putOut();
            System.out.println(
"消费了 :" + bread);
            
try
            
{
//                Thread.sleep(1000);
                Thread.sleep((int)Math.random() * 1000);
            }

            
catch(InterruptedException e)
            
{
                e.printStackTrace();
            }

        }

    }

}
分享到:
评论

相关推荐

    连锁商店配送中心选址研究——以中山市某面包店为例.docx

    然而,这样的选址策略并不一定适用于所有类型的企业,如面包店可能需要考虑更接近原料供应商或消费者的地方,以保持产品的新鲜度。 以中山市某面包店为例,其配送中心选址的影响因素更为具体。运输仓储费用、管理...

    市场分析报告:冰面包全球市场具有广阔的发展前景和巨大的市场潜力(简报).pdf

    自1994年成立以来,屏荣食品不仅建立了多个生产基地,还构建了广泛的销售网络,确保其冰面包产品能够覆盖更多的消费者群体。 #### 四、生产商现状分析 以屏荣食品发展有限公司为例,该企业在成立后的几十年里,...

    尼尔森 改变商城的想法

    让我们以杂货店为例来探讨这个问题。过去十年里,杂货店在创新方面取得了显著进展——引入了新的店铺形式、服务以及产品种类。然而,这些创新大多集中在边缘区域而非中心区域。例如: - **健康与营养:**随着消费者...

    扬特-伊利集团_品牌策略建议提案.ppt

    在渠道策略上,伊利着重巩固和发展全国营销网络,尤其在市场占有率低的地区建立新生产基地,以液态奶事业部为例,通过商超连锁通路,直接控制销售路径,提高效率。 价格策略上,伊利定位在中档市场,兼顾高端和低端...

    扬特伊利集团_品牌策略建议提案.pptx

    在渠道策略上,伊利致力于巩固和发展全国营销网络,尤其是在市场份额较低的地区建立新的生产基地,以液态奶事业部为例,采取商超连锁通路,直接控制销售渠道,缩短并拓宽销售路径,以提高效率。 价格策略方面,伊利...

    3750份-2020辛巴直播带货技巧-3页精品报告2020.pdf

    ### 直播带货技巧分析——以辛巴为例 #### 一、低客单价策略 辛巴在直播带货时特别注重商品的定价策略,尤其是低客单价产品的运用。这种策略能够有效地吸引那些对产品了解不多或者是首次尝试购买该类产品的消费者...

    2021-2025年中国冷冻烘焙食品行业市场定位策略研究报告.pdf

    这些食品在生产过程中经过冷冻处理,能够长期保存,并在需要时快速解冻、加热后供消费者食用。 中国冷冻烘焙食品行业的发展受多种因素影响,包括但不限于国家产业政策的支持、人均收入的增长、消费升级、以及冷链...

    taskerbox::top_hat:Java轻量级自动化引擎

    基于生产者(渠道)和消费者(动作)的Java自动化引擎 主要目标是自动化有用的任务。 您可以使用桌面用户界面或轻量级Web面板来控制正在运行的频道。 频道 档案 消息队列 价格查询器 社交媒体 爬行者 求职者 服务器...

    专题资料(2021-2022年)28类食品市场准入产品标准.doc

    总结来说,食品市场准入产品标准涉及从原料到成品的全过程,涵盖了食品安全、质量控制、生产设备和出厂检验等多个方面,旨在为消费者提供安全、高质量的食品。企业必须严格遵守这些标准,通过先进的生产设备和严格的...

    食品安全与日常饮食期末答案.doc

    7. 风险交流:风险交流涉及消费者、管理者和生产者之间的沟通,旨在提高对风险的认识。 8. 杂环胺形成机制中的催化剂:蛋白质的存在可能在杂环胺的形成中起到催化作用。 9. 元素慢性中毒的表现:一氧化碳中毒不...

    《人类简史》读后感:重新认识资本主义_模板.pdf

    以甘蔗种植为例,为了满足日益增长的甜食需求,甘蔗种植业大规模扩张,然而这种劳动密集型产业催生了残酷的奴隶贸易。约1000万非洲人被贩卖到美洲,其中大多数在恶劣条件下从事甘蔗种植,这一黑暗历史揭示了资本主义...

    [精选]经济学十大原理.pptx

    以航空公司为例,当飞机即将起飞时,航空公司会计算边际成本(如最后一张票的额外食品成本)和边际收益(如乘客支付的票价),以决定是否卖出剩余座位。如果边际收益高于边际成本,卖出座位是有利可图的。 同样,...

    食品饮料行业:建议关注成长性和确定性兼备的优质标的.pdf

    以卤制品为例,行业龙头在疫情期间逆势扩张,显示出强劲的发展潜力。速冻食品行业由于新品放量和餐饮回暖,同样具有成长性。休闲食品行业的单品型公司和平台型公司,由于业绩增长稳健和线上线下的经营改善,也是投资...

    转基因食品PPTPPT学习教案.pptx

    3. 延长保鲜期:改善农产品的耐储存性,满足消费者需求。 4. 缩短研发周期:快速培育新品种。 5. 打破物种限制:创造新物种,提供健康食品。 【转基因食品的挑战】 1. 不确定性:在极端气候下,转基因作物可能无法...

    STM32入门教程,初学者零基础

    以 **STM32F103C8T6** 为例,这是一款主流系列的 STM32F1 微控制器,具备以下特点: - **内核**:ARM Cortex-M3 - **主频**:72MHz - **RAM**:20KB (SRAM) - **ROM**:64KB (Flash) - **供电范围**:2.0V 至 3.6V ...

    2021-2025年中国冷冻烘焙食品行业经营管理战略研究报告.pdf

    1. 冷冻烘焙食品行业概述:冷冻烘焙食品是指以面包、糕点等烘焙食品为原料,经冷冻加工,在一定时间内保持品质与风味的产品。冷冻技术的应用可以保证食品的新鲜度和口感,同时便于储存和运输,满足市场需求。 2. ...

    单元十三转基因食品的质量控制PPT课件.pptx

    2. 减少农药使用,保护环境,减少化学残留对消费者的影响; 3. 开发具有特殊功能的食品,改善公众健康,如铁强化大米用于治疗贫血,富含维生素A的蔬菜可预防眼疾; 4. 创新高产稳产、物美价廉的新品种,如瑞士的金...

Global site tag (gtag.js) - Google Analytics