//库存函数,保存着库存的信息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加锁实现生产者和消费者的多线程问题相关推荐

  1. java的段子_java爬取捧腹网段子(多线程版)

    上一篇文章讲述了如何使用Java爬取内容并写入文件,但是速度堪忧,今天将代码搞成了多线程版本, 具体方式如下: 新建一个splider类,继承callable接口,用于存放我们需要多线程执行的逻辑: ...

  2. java如何确保单线程_java – 任何单线程程序如何成为有效的多线程程序?

    注意,该语句并不意味着任何正确的单线程程序也是正确的多线程程序,作者只是说明有可能将任何单线程程序转换为在多线程环境中执行. 但是,如果程序在单线程环境中已经不正确,那么在更复杂的多线程环境中它可能不 ...

  3. java中Thread与Runnable的区别

    在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口:Thread类是在java.lang包中定义的.一个类只要继承了Thread类同时覆写了本类中的run() ...

  4. 多线程-Thread、Runnable、Callbale、Future

    Thread:java使用Thread代表线程,所有的线程对象都必须是Thread类或其子类,可以通过继承Thread类来创建并启动多线程. package org.github.lujiango;p ...

  5. java多线程抽奖_java 线程池、多线程并发实战(生产者消费者模型 1 vs 10) 附案例源码...

    导读 前二天写了一篇<Java 多线程并发编程>点我直达,放国庆,在家闲着没事,继续写剩下的东西,开干! 线程池 为什么要使用线程池 例如web服务器.数据库服务器.文件服务器或邮件服务器 ...

  6. Java 多线程详解(四)------生产者和消费者

    Java 多线程详解(一)------概念的引入:https://blog.csdn.net/weixin_39816740/article/details/80089790 Java 多线程详解(二 ...

  7. mysql服务器多线程模型_java 线程池、多线程并发实战(生产者消费者模型 1 vs 10) 附案例源码 - 陈彦斌 - 博客园...

    导读 前二天写了一篇<Java 多线程并发编程>点我直达,放国庆,在家闲着没事,继续写剩下的东西,开干! 线程池 为什么要使用线程池 例如web服务器.数据库服务器.文件服务器或邮件服务器 ...

  8. java多线程:线程间的通信-生产者和消费者(三)

    在一个程序中,往往会通过多个线程协同来共同完成一项任务,线程间必然需要进行信息的传递,也即是进程间的通信,我们用生产者和消费者的例子来具体分析: 对于生产者和消费者之间的关系,他们都是针对同一资源的操 ...

  9. java信号量生产者_java信号量PV操作 解决生产者-消费者问题

    package test1; /** * 该例子演示生产者和消费者的问题(设只有一个缓存空间.一个消费者和一个生产者) * MySystem类定义了缓冲区个数以及信号量 * @author HYY * ...

最新文章

  1. Nginx学习4:负载均衡实例
  2. hdu 4738 2013杭州赛区网络赛 桥+重边+连通判断 ***
  3. Arrays.asList详解
  4. oracle的adr,oracle ADR
  5. 九宫格C语言递归程序,[置顶] C语言递归实现N宫格(九宫格)源码
  6. PHP7添加opcache.so模块
  7. HTML5 九宫格拼图游戏
  8. 管理信息系统需求调研分析指南-软件工程-www.knowsky.com
  9. 机器学习入门好文,强烈推荐(转载)
  10. no such file or directory, open
  11. 我的世界java版旁观模式_我的世界:8个被判定为bug的特性,旁观模式:这锅让我来背...
  12. abp web ui 负号提前显示
  13. 2023海南大学计算机考研信息汇总
  14. 网络安全--SQL注入介绍
  15. 浅谈矩阵 矩阵快速幂 动态dp 矩阵求逆
  16. 中文热门开源项目Top100,你知道多少?
  17. redflag Dc5.0,Asianux2安装时无法创建文件系统,缺少scsi驱动解决办法
  18. 《区块链革命》阅读笔记01
  19. 使用数据恢复软件恢复数据的详细教程
  20. 延时队列的几种实现方式

热门文章

  1. 前端学习(2336):angular之传递参数
  2. 前端学习(2028)vue之电商管理系统电商系统之展示物流进度
  3. 前端学习(1320):同步和异步得区别
  4. java面试题41 下面字段声明中哪一个在interface主体内是合法的? ()
  5. 第一百三十三期:MySQL锁会不会,你就差看一看咯
  6. Jenkins安装(Maven安装)(4)
  7. SSL 多线程通信 linux openSSL C API编程
  8. bin文件怎么转换成文本文档_Python脚本4:根据txt文本,批量创建文件夹
  9. 【Python基础】11_Python中的字符串
  10. 「洛谷2495」「BZOJ3052」「SDOI2001」消耗战【虚树+树形动态规划】