java 生产者消费者 demo_生产者与消费者--demo1---bai

import java.util.ArrayList;

import java.util.List;

import java.util.Random;

//自定义类,描述仓库

public class StoreHouse

{

private List products = new ArrayList(); //仓库的所有商品的列表

public void add(String product)

{

this.products.add(product);

}

Random rd = new Random();

public String sale() //随机从所有商品中,任取一件进行出售

{

int index = rd.nextInt(this.products.size());

//从数组中,删除序号为index的商品。并作为返回值返回。

String product = this.products.remove(index);

return product;

}

//获取仓库的商品个数

public int getSize()

{

return this.products.size();

}

}

import java.util.Random;

//消费者线程。不断的消费

public class ConsumeThread extends Thread

{

private StoreHouse house;//持有1个仓库

//构造函数中,传入仓库对象

public ConsumeThread(StoreHouse house)

{

this.house = house;

}

@Override

public void run() {

Random rd = new Random();

while(true)

{

synchronized (house)

{

if(house.getSize()==0)

{

System.out.println("仓库为空,消费者开始等待...");

//如果仓库为空,则本消费者线程进入等待状态。会释放同步锁。

try {

house.wait(); //释放同步锁,其他线程可以继续执行。

//Thread.sleep(3000);//不释放同步锁。所以其他线程无法继续执行。

//house.wait();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

synchronized (house)

{

if (house.getSize() > 0) //只要仓库的库存大于0

{

String product = house.sale();

System.out.println("消费者从仓库中取走了 " + product);

}

}

try {

Thread.sleep(rd.nextInt(2000));

} catch (InterruptedException e) {

e.printStackTrace();

} //随机休息2秒以内的时间

}

}

}

import java.util.Random;

//生产者线程。不断的往仓库添加商品

public class ProduceThread extends Thread

{

private StoreHouse house;//持有1个仓库

//构造函数中,传入仓库对象

public ProduceThread(StoreHouse house)

{

this.house = house;

}

@Override

public void run()

{

Random rd = new Random();

//不断的往仓库添加商品

while(true)

{

synchronized (house)

{

//随机产生1个商品名

String product = "商品" + rd.nextInt(200);

//将该商品添加到仓库

house.add(product);

house.notifyAll();//通知所有其他处于wait状态的线程继续执行

System.out.println("生产者将 " + product + " 添加到仓库中");

}

try {

Thread.sleep(rd.nextInt(2000));

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} //随机休息2秒以内的时间

}

}

}

public class Test

{

public static void main(String[] args)

{

//1 创建1个仓库对象,作为共享数据

StoreHouse house = new StoreHouse();

//2 创建生产者线程

ProduceThread pt = new ProduceThread(house);

//3 创建消费者线程

ConsumeThread ct1 = new ConsumeThread(house);

ConsumeThread ct2 = new ConsumeThread(house);

//4 启动线程

pt.start();

ct1.start();

ct2.start();

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/513485.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python字典是什么数据结构_Python常用数据结构——字典

Time will tell.前言迄今为止,我们已经为大家介绍了Python中的三种容器型数据类型,但是这些数据类型还不足以帮助我们解决所有的问题。例如,我们要保存一个人的信息,包括姓名、年龄、体重、单位地址、家庭住址、本人手机号、紧急联…

Serverless:这真的是未来吗?(二)

简介: 在关于无服务器的第二篇文章中,我们将讨论一些更广泛的问题。再次强调,我们并不是要做硬性规定。我们想提出一些观点,以促进所有利益相关者之间的讨论。许多说所有应用程序都将是无服务器的应用程序的人并未大规模运行其应用…

删除超过10亿用户的数据,Facebook 关闭面部识别系统

整理 | 祝涛 出品 | CSDN(ID:CSDNnews)Facebook周二宣布,计划在本月关闭其已有10年历史的面部识别系统,并删除超过10亿用户的面部扫描数据,原因是这项技术的使用引发了越来越多的社会担忧。Facebook新…

参与 Apache 顶级开源项目的 N 种方式,Apache Dubbo Samples SIG 成立!

简介: 一说到参与开源项目贡献,一般大家的反应都是代码级别的贡献,总觉得我的代码被社区合并了,我才算一个贡献者,这是一个常见的错误认知。其实,在一个开源社区中有非常多的角色是 non-code contributor&a…

python中bar的用法_python使用matplotlib绘图 -- barChart

matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图。而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中。它的文档相当完备,并且Gallery页面 中有上百幅缩略图,打开…

java在cmd中什么意思_为什么在cmd中java可以运行,javac不行?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼Path: C:\Program Files\NVIDIA Corporation\PhysX\Common;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files\Java\jdk1.8.0_05\bin;C:\Program F…

重磅 | 《中国移动云网一体产品白皮书(2021)》发布!

11月1日—11月3日,2021中国移动全球合作伙伴大会在广州隆重召开。11月2日,中国移动云能力中心副总经理孙少陵发表了《移动云技术内核2.0》主旨演讲,并在会上发布了《中国移动云网一体产品白皮书(2021)》。云网一体是市…

Flink 最佳实践之使用 Canal 同步 MySQL 数据至 TiDB

简介: 本文将介绍如何将 MySQL 中的数据,通过 Binlog Canal 的形式导入到 Kafka 中,继而被 Flink 消费的案例。 一. 背景介绍 本文将介绍如何将 MySQL 中的数据,通过 Binlog Canal 的形式导入到 Kafka 中,继而被 F…

我的工作网怎么样_分享一下我在珍爱网的相亲经历

分享一下我在珍爱网的相亲经历相亲对于单身人士来说并不是陌生词语,很多人可能都有比较丰富的相亲经验,但是对我而言,相亲,一直都是贬义词,我觉得一个没有能力的人才会指望相亲解决个人感情问题,万万没想到…

参数校验优雅实践

简介: 希望本文可以帮助到大家,可以用一种优雅方式接入参数校验,保护系统解放自身,从你我做起! 作者 | 中野 来源 | 阿里技术公众号 一 不厌其烦的 if else? 参数校验,为了保护自己的代码,一般…

【实践案例】Databricks 数据洞察 Delta Lake 在基智科技(STEPONE)的应用实践

简介: 获取更详细的 Databricks 数据洞察相关信息,可至产品详情页查看:https://www.aliyun.com/product/bigdata/spark 作者 高爽,基智科技数据中心负责人 尚子钧,数据研发工程师 1、基智科技 北京基智科技有限公司…

java springmvc搭建_【JavaEE】Springmvc+Spring搭建方法及example

这一篇在前一篇Springmvc的基础上,加上Spring。Spring的主要用途叫做控制反转(依赖注入,IoC/DI)和面向切面的编程(AOP),本文只介绍IoC,因为AOP主要的应用场景是记录日志,暂时不需要,等我要整合的几个框架都…

腾讯王巨宏:开源是一项长跑,与开发者共赢开源未来

11月4日,2021腾讯数字生态大会Techo Day技术峰会在武汉召开,腾讯首次披露了在5大技术领域的开源新进展,并回顾了腾讯开源的四大变化。 腾讯公司副总裁王巨宏表示,云与开源共生共荣、相互支撑,共同为用户和开发者创造价…

python安装找不到硬盘_python2.7下安装theano

今下午在新硬盘上面重新升级Python2.7的时候,升级完之后,发现pip还是不行,使用“# wgethttps://bootstrap.pypa.io/ez_setup.py -O - |python”提示找不到libpython2.7.so.1.0,经过查找,可以使用如下方法解决&#xff…

【阿里云EMR实战篇】以EMR测试集群版本为例,详解 Flink SQL Client 集成 Hive 使用步骤

简介: 以测试集群版本为例(EMR-4.4.1)—— Flink SQL Client 集成 Hive 使用文档 作者:林志成,阿里云EMR产品团队技术支持,拥有多年开源大数据经验 1、以测试集群版本为例(EMR-4.4.1&#xff…

python pycharm打包_【转】通过PyCharm 把Python 程序打包为exe

但是由于PyCharm 用了虚拟环境venv, 所有一些参数是有区别的,网上查询了很久没有查到这方面的信息,下面这些都是我自己探索出来的lin49940。步骤一,点击进入PyCharm 的输入终端Terminal步骤二,输入下面的语句&#xff…

云原生的进一步具象化

简介: 云原生这个概念已经越来越深入人心,但对“云原生到底是什么?”这个问题,仍然是各种各样的解读,最近对云原生具体是什么有了点感触,于是写下来分享和探讨下。 云原生这个概念已经越来越深入人心&…

java求极限值_高等数学——讲透求极限两大方法,夹逼法与换元法

本文始发于个人公众号:TechFlow今天的文章聊聊高等数学当中的极限,我们跳过极限定义以及一些常用极限计算的部分。我想对于一些比较常用的函数以及数列的极限,大家应该都非常熟悉。大部分比较简单的函数或者数列,我们可以很直观地…

Kubernetes 上调试 distroless 容器

作者 | Addo Zhang来源 | 云原生指北Distroless 镜像Distroless 容器,顾名思义使用 Distroless 镜像[1]作为基础镜像运行的容器。"Distroless" 镜像只包含了你的应用程序以及其运行时所需要的依赖。不包含你能在标准 Linxu 发行版里的可以找到的包管理器、…

技术干货 | 如何在 Library 中使用/依赖 mPaaS?

简介: 在使用 mPaaS 框架过程中,有时需要复用模块。复用时需要按照使用 Module 依赖的方式添加模块。 使用场景 在使用 mPaaS 框架过程中,有时需要复用模块。复用时需要按照使用 Module 依赖的方式添加模块。本文以将复用 mPaaS 扫码组件的…