java 多线程经典例子——生产者与消费者的问题
产品名称类:
public class Product {//产品名称private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}}
生产者类:
/*** 生产者* @author 饭香**/
public class Producer implements Runnable{private Shop shop;//要去送货的商店public Producer(Shop shop){this.shop=shop;}public void run() {for(int i=0;i<100;i++){shop.produ();}} }
消费者类
/*** 消费者* @author 饭香**/
public class Cousumer implements Runnable{private Shop shop;//要去消费的商店public Cousumer(Shop shop){this.shop=shop;}public void run() {for(int i=0;i<100;i++){//消费100次shop.cousu();}}}
模拟商店(一切围绕商店,商店只能有一个,产品随便多个实例.这个也是别人问我总是出错的地方.对象思想)
import java.util.ArrayList;
import java.util.List;
/*** 模拟商店 (进货/销售)* @author fx**/
public class Shop {private static int i=0;//产品的容器;达到容器暂停生产,消费到0等待生产private static List<Product> list;static{list= new ArrayList<Product>();}/*** 生产产品*/public synchronized void produ(){if(list.size()>=5){try {System.out.println("--------------生产商品"+i+"时,达到了总数暂停生产-------");this.wait();//进入休眠} catch (InterruptedException e) {System.out.println(e.toString());e=null;}} //生产商品Product product= new Product();product.setName("商品"+i);list.add(product);System.out.println("生产了商品---->"+product.getName()+"商品总数"+i);System.out.println("容器容量"+list.size());i++;super.notify();}/*** 消费产品* @return*/public synchronized void cousu(){if(list.size()==0){//消费完时,挂起System.out.println("+++++++++++++++++++++++商品消费完了.等待+++++++++++++++=");try {this.wait();} catch (InterruptedException e) {// TODO Auto-generated catch blockSystem.out.println(e.toString());e=null;}}Product product=list.get(0);list.remove(0);System.out.println("消费了获得了商品-->"+product.getName());System.out.println("容器容量"+list.size());super.notify();}
}
测试代码类:
public static void main(String[] args) {Shop shop=new Shop();//商店Producer pro=new Producer(shop);Cousumer cou = new Cousumer(shop);new Thread(pro,"pro").start();new Thread(cou,"cou").start();}
转自: http://51even.iteye.com/blog/767935
java 多线程经典例子——生产者与消费者的问题相关推荐
- 基于java多线程来实现生产者和消费者的实例
声明:本实例是在网上看到,做了很小的修改.所以感谢之前的作者.只是一时忘了哪儿看到,没法加入链接,向原作者道歉,以示尊重.抱歉-^)... 同步栈: 1 class SycnStack { 2 pri ...
- Java多线程2.3.生产者与消费者之间的关系2
生产者与消费者之间的关系 1.线程间通信问题描述图 2.线程的状态转换图及常见执行情况 3.等待唤醒机制思路图解 4.线程的生命周期
- C#多线程学习(三) 生产者和消费者
C#多线程学习(三) 生产者和消费者 原文链接:http://kb.cnblogs.com/page/42530/ 本系列文章导航 C#多线程学习(一) 多线程的相关概念 C#多线程学习(二) 如何操 ...
- C#多线程学习(三) 生产者和消费者 (转载系列)——继续搜索引擎研究
前面说过,每个线程都有自己的资源,但是代码区是共享的,即每个线程都可以执行相同的函数.这可能带来的问题就是几个线程同时执行一个函数,导致数据的混乱,产生不可预料的结果,因此我们必须避免这种情况的发生. ...
- Python爬虫的经典多线程方式,生产者与消费者模型
在之前的文章当中我们曾经说道,在多线程并发的场景当中,如果我们需要感知线程之间的状态,交换线程之间的信息是一件非常复杂和困难的事情.因为我们没有更高级的系统权限,也没有上帝视角,很难知道目前运行的状态 ...
- Java多线程(含生产者消费者模式详解)
多线程 导航 多线程 1 线程.进程.多线程概述 2 创建线程 (重点) 2.1 继承Thread类(Thread类也实现了Runnable接口) 2.2 实现Runnable接口(无消息返回) 2. ...
- java多线程生产者与消费者案例_多线程操作实例——生产者与消费者
面对多线程学习生产者与消费者是最基本的实例 对于java后端开发的人员必须要掌握,还有考研考试计算机操作系统的同鞋. 下面是三个实例对于生产者与消费者的的例子,层层递进,逐步解决问题. 问题:生产者- ...
- Java多线程:解决生产者/消费者模式
什么是生产者/消费者模式 生产者消费者模型具体来讲,就是在一个系统中,存在生产者和消费者两种角色,他们通过内存缓冲区进行通信,生产者生产消费者需要的资料,消费者把资料做成产品. 具体来说就是: 生产者 ...
- [转]C#多线程学习(三) 生产者和消费者
前面说过,每个线程都有自己的资源,但是代码区是共享的,即每个线程都可以执行相同的函数.这可能带来的问题就是几个线程同时执行一个函数,导致数据的混乱,产生不可预料的结果,因此我们必须避免这种情况的发生. ...
最新文章
- Bug之ajax不执行
- 初识图机器学习(part1)--图的概述
- kind富文本编辑器_在项目中集成富文本编辑器
- 守护线程和非守护线程
- VS2017+Opencv3.3+Opencv_contribute编译
- 从俄罗斯方块,迈向强化学习大门
- macOS安装过程中“应用副本已损坏”的解决方案
- apiCloud中aui获取不到高度,pos.h为0,offsetHeight为0问题
- flume学习(五):使用hive来分析flume收集的日志数据
- Install/Remove of the Service Denied
- db2数据库基础知识
- docker修改服务器ip地址,如何修改docker的ip地址
- 【linux】X Server / X Client / Window manager 的关系
- Codeforces 1092D1. Great Vova Wall (Version 1)
- matlab图像放大程序,图像放大并进行BiCubic插值 Matlab/C++代码
- 3656. 心与心的距离
- Alien Skin Exposure v6.x 最新通用完整版汉化补丁
- python计算样本方差_Python numpy 样本方差估计
- 以用户体验五要素的思路,如何编写产品需求文档(PRD)
- 南京邮电大学网络攻防训练平台逆向第三题PY交易