java 多线程生产者_java-Runnable加锁实现生产者和消费者的多线程问题

//库存函数,保存着库存的信息Storage.java

public classStorage {//模拟库存

public Integer num=1;

}//生产者函数 product.java/************************************************************

Copyright (C), 1988-1999, Huawei Tech. Co., Ltd.

FileName: Customer.java

Author:     Light

Version :    version1.0

Date:    2018/7/11

Description:    生产者进行生产,生产者需要在消费者进行消费后生产,模拟的内存只有一块,

当没有消费时,会提醒消费者消费,唤醒消费者进程 // 模块描述

Version:       1.0// 版本信息

Function List:    // 主要函数及其功能

1.

History:

// 历史修改记录

Light    2018/7/11     1.0     build this moudle

***********************************************************/

public class Product implementsRunnable{privateStorage storage;publicProduct(Storage storage) {super();this.storage =storage;

}

@Overridepublic voidrun() {//TODO Auto-generated method stub

while(true){synchronized(storage) {if(this.storage.num<1){//模拟生产

this.storage.num++;

System.out.println("生产一个");//唤醒队列中所有进程

this.storage.notifyAll();

}else{try{//进入等待队列

this.storage.wait();

}catch(InterruptedException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

}

}//消费者函数 Customer.java/************************************************************

Copyright (C), 1988-1999, Huawei Tech. Co., Ltd.

FileName: Customer.java

Author:     Light

Version :    version1.0

Date:    2018/7/11

Description:    消费者进行消费,消费者需要在生产者进行生产再进行消费,

当没有生产时,会提醒生产者生产,唤醒生产者进程 // 模块描述

Version:       1.0// 版本信息

Function List:    // 主要函数及其功能

1.

History:

// 历史修改记录

Light    2018/7/11     1.0     build this moudle

***********************************************************/

public class Customer implementsRunnable {privateStorage storage;publicCustomer(Storage storage) {super();this.storage =storage;

}/*** 重写run()

*@author[Light](必须)

*@see[run()](可选)

*@since[version 1.0] (必须)*/@Overridepublic voidrun() {//TODO Auto-generated method stub

while(true){//加锁

synchronized(storage) {//判断是否生产者进行了生产

if(this.storage.num>=1){//模拟消费

this.storage.num--;

System.out.println("消费一个");//唤醒队列所有进程

this.storage.notifyAll();

}else{try{//等待

this.storage.wait();

}catch(InterruptedException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

}

}//主函数 MyTest.java/************************************************************

Copyright (C), 1988-1999, Huawei Tech. Co., Ltd.

FileName: MyTest.java

Author:     Light

Version :    version1.0

Date:    2018/7/11

Description:   消费生产进程模拟 // 模块描述

Version:       1.0// 版本信息

Function List:    // 主要函数及其功能

1.

History:

// 历史修改记录

Light    2018/7/11     1.0     build this moudle

***********************************************************/

public classMyTest {public static voidmain(String[] args) {

//库存

Storage storage=newStorage();

//生产者

Product p1=newProduct(storage);

//两名消费者

Customer c1=newCustomer(storage);

Customer c2=newCustomer(storage);

Thread t1=newThread(p1);

Thread t2=newThread(c1);

Thread t3=newThread(c2);

t1.start();

t2.start();

t3.start();

}

}

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

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

相关文章

Axure共享问题

获取共享项目 文件——获取共享项目——\\192.168.0.212\axureshare\HZ下一步——选择本地保存路径 签入签出 A签出——修改——签入——B获新就能看到新的了A签出的时候B不能更改 当A签出时&#xff0c;B无法查看动态面板的每个状态此时可以把面板复制到自己的页面看 修改中可…

maven项目和普通项目转换

转载于:https://www.cnblogs.com/yver/p/6054131.html

.java文件_【转】java文件操作大全

一.获得控制台用户输入的信息public String getInputMessage() throws IOException...{System.out.println("请输入您的命令∶");byte buffer[]new byte[1024];int countSystem.in.read(buffer);char[] chnew char[count-2];//最后两位为结束符&#xff0c;删去不要f…

T-SQL 字符串前加 N 是什么意思

比如 select status Nstopped 那么其中的字符串 stopped 前面为什么要加 N 呢&#xff1f;而且我们发现有些地方加 N 与否都没有影响&#xff0c;有些地方又必须加 N。 N 在这里表示 Unicode&#xff0c;就是双字节字符。对于西文字符&#xff0c;用一个字节来存储过足够了&am…

Gradle用户指南(1)-Gradle安装

前置条件 Gradle 需要 Java JDK 或者 JRE&#xff0c;版本是 6 及以上。Gradle 将会装载自己的 Groovy 库&#xff0c;因此&#xff0c;Groovy 不需要被安装。任何存在的 Groovy 安装都会被 Gradle 忽略。 Gradle 使用你 path 中的 JDK,或者&#xff0c;您可以设置 java_home 环…

幻读Java_脏读、幻读、不可重复读和丢失更新

1.脏读 -- 一个事务读取到另外一个事务没有提交的数据事务T1&#xff1a;更新一条数据-->事务T2&#xff1a;读取事务T1更新的记录事务T1&#xff1a;调用commit进行提交此时事务T2读取到的数据是保存在数据库内存中的数据&#xff0c;称为脏数据&#xff0c;这个过程称为脏…

数据库生成文本文件

通过SQLServer配置管理器——功能的外围应用配置器——打开xp_cmdshell xp_cmdshell "cmd /c echo aaaaa>>a.txt"有特殊符号(如换行<>()%|[]等)须加特殊符号前加^ 调试&#xff1a;-------------aa.cmd---------------echo 但有时候加与不加都一样&#…

第十六章:Java内存模型——Java并发编程实战

一、什么是内存模型&#xff0c;为什么要使用它 如果缺少同步&#xff0c;那么将会有许多因素使得线程无法立即甚至永远看到一个线程的操作结果 编译器把变量保存在本地寄存器而不是内存中编译器中生成的指令顺序&#xff0c;可以与源代码中的顺序不同处理器采用乱序或并行的方…

二进制包 mysql_二进制包安装MySQL数据库

1.1二进制包安装MySQL数据库1.1.1 安装前准备(规范)[rootMysql_server ~]# mkdir -p /home/zhurui/tools ##创建指定工具包存放路径[rootMysql_server ~]# wget http://ftp.ntu.edu.tw/pub/MySQL/Downloads/MySQL-5.5/mysql-5.5.32-linux2.6-x86_64.tar.gz ##下载二进制包[ro…

SELECT TOP n 性能测试

--快1. select top 100 * from test where c1 < 30000 order by c2 --慢2. select top 101 * from test where c1 < 30000 order by c2 1. is more than two times faster than 2. CREATE TABLE [dbo].[NUM]([n] int NOT NULL, s varchar(128) NULL, PRIMARY KEY CLUSTE…

【转】String.format详解

一、前言                            String.format 作为文本处理工具&#xff0c;为我们提供强大而丰富的字符串格式化功能&#xff0c;为了不止步于简单调用 String.format("Hello %s", "John");&#xff0c;下面将笔记整理…

vs2010帮助文件安装完全攻略

1.第一种情况&#xff0c;安装时自动安装了help viewer这个就比较方便了&#xff0c;只需要第一次选择一个合适的位置&#xff0c;将Iso里面的文件安装进来即可&#xff0c;几乎就是傻瓜式的下一步 2.安装s2010时没有安装&#xff0c;之后又使用过帮助文件&#xff0c;这个东西…

java node websocket_nodejs怎么实现webSocket接口即时通讯服务?

websocket工作方式:广播和收听 # 使用场景:金融/聊天室/……websocket:服务器支持广泛(node/java/php/c#……) 原生API操作复杂 可以使用第三方模块:socket.io 是在websocket的基础上创建的模块 优点:简单下载服务器端npm i socket.io客户端使用// 工作方式:事件绑定与事件触发…

java与sql2005连接数据库_Java链接数据库SQl Server2005

Java链接数据库SQL Server2005步骤&#xff1a;1.到微软官方网站下载2005的jdbc并解压&#xff0c;获得文件sqljdbc.jar。本人使用的是sqljdbc_1.2&#xff0c;解压后即为该文件。sql jdbc 1.2下载地址&#xff1a;2.将sqljdbc.jar拷贝到C:\Program Files\Java\jre1.5.0_08\lib…

Microsoft Team Foundation Server 2010安装指南

索引:介绍安装操作系统准备安装过程中的需要的用户账户安装IIS 7.0安装SQL Server 2008安装SQL Server 2008 SP1补丁安装TFS 2010配置TFS 2010&#xff08;以高级配置为例&#xff09;配置TFS Build服务安装序列号 正文&#xff1a; 介绍&#xff1a;微软官方发布了Microsoft T…

IE本地网页弹出黄条“限制网页脚本”

Internet选项 高级——点选“允许活动内容在我的计算机上的文件中运行”

java提高班_2020年最新天码营-Java提高班,资源教程下载

课程名称2020年最新天码营-Java提高班&#xff0c;资源教程下载课程介绍初学者先广在精&#xff0c;关注代码背后的实现&#xff0c;关注内功修炼&#xff0c;了解实现原理和思想&#xff0c;形成自己完整的技术体系&#xff0c;知识成片之后就容易触类旁通&#xff0c;进步的速…

Swift3.0语言教程替换子字符串

Swift3.0语言教程替换子字符串 Swift3.0语言教程替换子字符串,替换子字符串其实就是将字符串中的子字符串删除&#xff0c;然后再进行添加。为了让这一繁琐的过程变的简单&#xff0c;NSString提供了替换子字符串的3个方法&#xff0c;这3个方法分别为&#xff1a;replacingOcc…

反射的使用

//加载dll库Assembly dll Assembly.LoadFile("E:\whq\code\Test\DLLConsole\bin\Debug\Test.UI.dll");//获取所有类型&#xff08;类、接口……&#xff09;Type[] typeClass dll.GetTypes();foreach (Type t in typeClass){//获取所有公共成员FieldInfo[] fields …

7-10外连接查询

外连接&#xff1a; 至少返回一个表中的所有记录&#xff0c;根据匹配条件有选择性的返回另一张表的记录。 外连接特点&#xff1a; 1&#xff1a;参与外连接的表有主从之分。 2&#xff1a;以主表的每行数所匹配的从表的数据列将符合条件的数据值直接返回到结果集中。 3:对那些…