产品名称类:


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 多线程经典例子——生产者与消费者的问题相关推荐

  1. 基于java多线程来实现生产者和消费者的实例

    声明:本实例是在网上看到,做了很小的修改.所以感谢之前的作者.只是一时忘了哪儿看到,没法加入链接,向原作者道歉,以示尊重.抱歉-^)... 同步栈: 1 class SycnStack { 2 pri ...

  2. Java多线程2.3.生产者与消费者之间的关系2

    生产者与消费者之间的关系 1.线程间通信问题描述图 2.线程的状态转换图及常见执行情况 3.等待唤醒机制思路图解 4.线程的生命周期

  3. C#多线程学习(三) 生产者和消费者

    C#多线程学习(三) 生产者和消费者 原文链接:http://kb.cnblogs.com/page/42530/ 本系列文章导航 C#多线程学习(一) 多线程的相关概念 C#多线程学习(二) 如何操 ...

  4. C#多线程学习(三) 生产者和消费者 (转载系列)——继续搜索引擎研究

    前面说过,每个线程都有自己的资源,但是代码区是共享的,即每个线程都可以执行相同的函数.这可能带来的问题就是几个线程同时执行一个函数,导致数据的混乱,产生不可预料的结果,因此我们必须避免这种情况的发生. ...

  5. Python爬虫的经典多线程方式,生产者与消费者模型

    在之前的文章当中我们曾经说道,在多线程并发的场景当中,如果我们需要感知线程之间的状态,交换线程之间的信息是一件非常复杂和困难的事情.因为我们没有更高级的系统权限,也没有上帝视角,很难知道目前运行的状态 ...

  6. Java多线程(含生产者消费者模式详解)

    多线程 导航 多线程 1 线程.进程.多线程概述 2 创建线程 (重点) 2.1 继承Thread类(Thread类也实现了Runnable接口) 2.2 实现Runnable接口(无消息返回) 2. ...

  7. java多线程生产者与消费者案例_多线程操作实例——生产者与消费者

    面对多线程学习生产者与消费者是最基本的实例 对于java后端开发的人员必须要掌握,还有考研考试计算机操作系统的同鞋. 下面是三个实例对于生产者与消费者的的例子,层层递进,逐步解决问题. 问题:生产者- ...

  8. Java多线程:解决生产者/消费者模式

    什么是生产者/消费者模式 生产者消费者模型具体来讲,就是在一个系统中,存在生产者和消费者两种角色,他们通过内存缓冲区进行通信,生产者生产消费者需要的资料,消费者把资料做成产品. 具体来说就是: 生产者 ...

  9. [转]C#多线程学习(三) 生产者和消费者

    前面说过,每个线程都有自己的资源,但是代码区是共享的,即每个线程都可以执行相同的函数.这可能带来的问题就是几个线程同时执行一个函数,导致数据的混乱,产生不可预料的结果,因此我们必须避免这种情况的发生. ...

最新文章

  1. Bug之ajax不执行
  2. 初识图机器学习(part1)--图的概述
  3. kind富文本编辑器_在项目中集成富文本编辑器
  4. 守护线程和非守护线程
  5. VS2017+Opencv3.3+Opencv_contribute编译
  6. 从俄罗斯方块,迈向强化学习大门
  7. macOS安装过程中“应用副本已损坏”的解决方案
  8. apiCloud中aui获取不到高度,pos.h为0,offsetHeight为0问题
  9. flume学习(五):使用hive来分析flume收集的日志数据
  10. Install/Remove of the Service Denied
  11. db2数据库基础知识
  12. docker修改服务器ip地址,如何修改docker的ip地址
  13. 【linux】X Server / X Client / Window manager 的关系
  14. Codeforces 1092D1. Great Vova Wall (Version 1)
  15. matlab图像放大程序,图像放大并进行BiCubic插值 Matlab/C++代码
  16. 3656. 心与心的距离
  17. Alien Skin Exposure v6.x 最新通用完整版汉化补丁
  18. python计算样本方差_Python numpy 样本方差估计
  19. 以用户体验五要素的思路,如何编写产品需求文档(PRD)
  20. 南京邮电大学网络攻防训练平台逆向第三题PY交易

热门文章

  1. 各个系统动态多路径软件识别LUN的方法
  2. 开发环境中实现Lombok消除Java冗余
  3. MongoRepository
  4. draw.io创建自定义形状
  5. 洛谷P3376 【模板】网络最大流
  6. Visual Studio 2017 最新全量离线下载方法[有惊喜]
  7. PullToRefreshListView下拉刷新与上拉载入
  8. 2014全年目标及执行情况跟踪
  9. oracle创建分区表
  10. 外部类的静态成员不允许直接使用非静态内部类