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();
}
}
java 多线程生产者_java-Runnable加锁实现生产者和消费者的多线程问题相关推荐
- java的段子_java爬取捧腹网段子(多线程版)
上一篇文章讲述了如何使用Java爬取内容并写入文件,但是速度堪忧,今天将代码搞成了多线程版本, 具体方式如下: 新建一个splider类,继承callable接口,用于存放我们需要多线程执行的逻辑: ...
- java如何确保单线程_java – 任何单线程程序如何成为有效的多线程程序?
注意,该语句并不意味着任何正确的单线程程序也是正确的多线程程序,作者只是说明有可能将任何单线程程序转换为在多线程环境中执行. 但是,如果程序在单线程环境中已经不正确,那么在更复杂的多线程环境中它可能不 ...
- java中Thread与Runnable的区别
在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口:Thread类是在java.lang包中定义的.一个类只要继承了Thread类同时覆写了本类中的run() ...
- 多线程-Thread、Runnable、Callbale、Future
Thread:java使用Thread代表线程,所有的线程对象都必须是Thread类或其子类,可以通过继承Thread类来创建并启动多线程. package org.github.lujiango;p ...
- java多线程抽奖_java 线程池、多线程并发实战(生产者消费者模型 1 vs 10) 附案例源码...
导读 前二天写了一篇<Java 多线程并发编程>点我直达,放国庆,在家闲着没事,继续写剩下的东西,开干! 线程池 为什么要使用线程池 例如web服务器.数据库服务器.文件服务器或邮件服务器 ...
- Java 多线程详解(四)------生产者和消费者
Java 多线程详解(一)------概念的引入:https://blog.csdn.net/weixin_39816740/article/details/80089790 Java 多线程详解(二 ...
- mysql服务器多线程模型_java 线程池、多线程并发实战(生产者消费者模型 1 vs 10) 附案例源码 - 陈彦斌 - 博客园...
导读 前二天写了一篇<Java 多线程并发编程>点我直达,放国庆,在家闲着没事,继续写剩下的东西,开干! 线程池 为什么要使用线程池 例如web服务器.数据库服务器.文件服务器或邮件服务器 ...
- java多线程:线程间的通信-生产者和消费者(三)
在一个程序中,往往会通过多个线程协同来共同完成一项任务,线程间必然需要进行信息的传递,也即是进程间的通信,我们用生产者和消费者的例子来具体分析: 对于生产者和消费者之间的关系,他们都是针对同一资源的操 ...
- java信号量生产者_java信号量PV操作 解决生产者-消费者问题
package test1; /** * 该例子演示生产者和消费者的问题(设只有一个缓存空间.一个消费者和一个生产者) * MySystem类定义了缓冲区个数以及信号量 * @author HYY * ...
最新文章
- Nginx学习4:负载均衡实例
- hdu 4738 2013杭州赛区网络赛 桥+重边+连通判断 ***
- Arrays.asList详解
- oracle的adr,oracle ADR
- 九宫格C语言递归程序,[置顶] C语言递归实现N宫格(九宫格)源码
- PHP7添加opcache.so模块
- HTML5 九宫格拼图游戏
- 管理信息系统需求调研分析指南-软件工程-www.knowsky.com
- 机器学习入门好文,强烈推荐(转载)
- no such file or directory, open
- 我的世界java版旁观模式_我的世界:8个被判定为bug的特性,旁观模式:这锅让我来背...
- abp web ui 负号提前显示
- 2023海南大学计算机考研信息汇总
- 网络安全--SQL注入介绍
- 浅谈矩阵 矩阵快速幂 动态dp 矩阵求逆
- 中文热门开源项目Top100,你知道多少?
- redflag Dc5.0,Asianux2安装时无法创建文件系统,缺少scsi驱动解决办法
- 《区块链革命》阅读笔记01
- 使用数据恢复软件恢复数据的详细教程
- 延时队列的几种实现方式
热门文章
- 前端学习(2336):angular之传递参数
- 前端学习(2028)vue之电商管理系统电商系统之展示物流进度
- 前端学习(1320):同步和异步得区别
- java面试题41 下面字段声明中哪一个在interface主体内是合法的? ()
- 第一百三十三期:MySQL锁会不会,你就差看一看咯
- Jenkins安装(Maven安装)(4)
- SSL 多线程通信 linux openSSL C API编程
- bin文件怎么转换成文本文档_Python脚本4:根据txt文本,批量创建文件夹
- 【Python基础】11_Python中的字符串
- 「洛谷2495」「BZOJ3052」「SDOI2001」消耗战【虚树+树形动态规划】