生产者:向仓库容器container中填充对象,直到达到设置的库存上限MAX,然后就wait等待,并且通知叫醒notify消费者去消费。

生产者代码:

Code:
  1. import java.util.List;
  2. public class Product implements Runnable {
  3. private List container = null;
  4. private int count;
  5. public Product(List lst) {
  6. this.container = lst;
  7. }
  8. public void run() {
  9. while (true) {
  10. synchronized (container) {
  11. if (container.size() > MultiThread.MAX) {
  12. try {
  13. container.wait();
  14. } catch (InterruptedException e) {
  15. e.printStackTrace();
  16. }
  17. }
  18. try {
  19. Thread.sleep(100);
  20. } catch (InterruptedException e) {
  21. e.printStackTrace();
  22. }
  23. container.add(new Object());
  24. container.notify();
  25. System.out.println("我生产了" + (++count) + "个");
  26. }
  27. }
  28. }
  29. }

消费者:消费仓库container中的货物,当库存为空等于0时就停止等待wait并且通知叫醒notify生产者。

消费者代码:

Code:
  1. import java.util.List;
  2. public class Consume implements Runnable {
  3. private List container = null;
  4. private int count;
  5. public Consume(List lst) {
  6. this.container = lst;
  7. }
  8. public void run() {
  9. while (true) {
  10. synchronized (container) {
  11. if (container.size() == 0) {
  12. try {
  13. container.wait();// 放弃锁
  14. } catch (InterruptedException e) {
  15. e.printStackTrace();
  16. }
  17. }
  18. try {
  19. Thread.sleep(100);
  20. } catch (InterruptedException e) {
  21. e.printStackTrace();
  22. }
  23. container.remove(0);
  24. container.notify();
  25. System.out.println("我吃了" + (++count) + "个");
  26. }
  27. }
  28. }
  29. }

运行演示:启动了一个生产者和一个消费者,可以从控制台看到生产和消费的情况。

代码:

Code:
  1. import java.util.ArrayList;
  2. import java.util.List;
  3. public class MultiThread {
  4. private List container = new ArrayList();
  5. public final static int MAX = 5;
  6. public static void main(String args[]) {
  7. MultiThread m = new MultiThread();
  8. new Thread(new Consume(m.getContainer())).start();
  9. new Thread(new Product(m.getContainer())).start();
  10. }
  11. public List getContainer() {
  12. return container;
  13. }
  14. public void setContainer(List container) {
  15. this.container = container;
  16. }
  17. }

线程演示生产者和消费者的一个例子相关推荐

  1. 【Linux下】 线程同步 生产者与消费者模型

    文章目录 [Linux下] 线程同步 生产者与消费者模型 线程同步 同步概念与竞态条件 条件变量 条件变量本质 操作条件变量 初始化和销毁条件变量 等待 唤醒 通过条件变量实现的简单线程同步例子 为什 ...

  2. Windows线程(生产者与消费者问题)

    Windows线程(生产者与消费者问题) 转载 佟强 2008.10.10 生产者-消费者问题是一个经典的进程同步问题,该问题最早由Dijkstra提出,用以演示他提出的信号量机制.在同一个进程地址空 ...

  3. java线程之生产者与消费者

    预习java线程的三种创建方式 package com.bj.thread;import java.util.concurrent.*;/*** @FileName: TestThread* @Rem ...

  4. JAVA笔记14__多线程共享数据(同步)/ 线程死锁 / 生产者与消费者应用案例 / 线程池...

    /*** 多线程共享数据* 线程同步:多个线程在同一个时间段只能有一个线程执行其指定代码,其他线程要等待此线程完成之后才可以继续执行.* 多线程共享数据的安全问题,使用同步解决.* 线程同步两种方法: ...

  5. java线程-从生产者和消费者模型说起

    今天学习了经典的生产者和消费者模型,引起了对java线程等知识的一系列的思考. 在平时的编程中,经常遇到一个线程要产生数据,而另一个线程要处理产生出来的数据,这其实就是生产者和消费者的关系.生产者在产 ...

  6. java-多线程(二)-生产者与消费者

    什么是生产者消费者模型? 举个例子:以DOTA来说,辅助进行拉野,大哥收野,辅助就是生产者,大哥就是消费者,辅助拉一波,大哥清一波.这两个配合起来,就是生产者与消费者 但是这样效率很低,毕竟一波野怪还 ...

  7. 笔记-13-多线程 Thread方法 线程安全 生产者和消费者 死锁和阻塞

    1.实现多线程 1.1简单了解多线程[理解] 是指从软件或者硬件上实现多个线程并发执行的技术. 具有多线程能力的计算机因有硬件支持而能够在同一时间执行多个线程,提升性能. 1.2并发和并行[理解] 并 ...

  8. java的知识点34——线程通信 || 生产者与消费者问题

    线程通信 应用场景:生产者和消费者问题 • 假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库,消费者将仓库中产品取走消费 • 如果仓库中没有产品,则生产者将产品放入仓库,否则停止生产并等待, ...

  9. 14.4 线程通讯-生产者与消费者

    package cn.chen.threadcommunication; /* 线程通讯:一个线程完成了自己的任务时,要通知另外一个线程去完成另一个任务.生产者与消费者wait(); 等待如果线程执行 ...

最新文章

  1. Windows Server 2003文件夹不能共享的解决办法【转】
  2. matlab演示系统,基于Matlab的通信原理演示系统的设计与应用
  3. 冒泡排序(O(n^2))
  4. Jetson TX1使用usb camera采集图像 (1)
  5. InfluxData【环境搭建 02】时序数据库客户端 InfluxCLI 最新版本安装启动验证(在线安装+离线安装及各版本下载地址)
  6. flink二阶提交(没有搞完)
  7. VHDL数字钟的设计与制作
  8. Operations Manager 2007 监控Active Directory SCOM-Part 3
  9. linux 系统自动挂起,linux 系统挂起
  10. Android开发笔记(一百六十四)仿京东首页的下拉刷新
  11. 一个虚拟社交公司的融资历程
  12. 最基础的傅里叶变换公式推导
  13. 什么是晶振?晶振在电路中的作用是什么?
  14. 使用五数概括法来确定数据集中的孤立点
  15. 【附源码】Java计算机毕业设计安卓高速铁路配餐app论文(程序+LW+部署)
  16. Self-Attention Generative Adversarial Networks(SAGAN)理解
  17. RB-tree性质理解
  18. SecureCRT教程——如何使用SecureCRT命令窗口将命令发送到多个会话
  19. c语言字符串输入的陷阱
  20. 有什么编辑图片加文字的软件?今日推荐:图片编辑软件加文字

热门文章

  1. 通俗易懂!视觉slam第三部分——slam数学表示
  2. 【TI-ONE系列教程(五)】如何使用 TI-ONE SDK 玩转算法大赛
  3. SIGIR'21「微软」:强化学习过滤负样本噪声提升点击率
  4. 数学建模 时间序列分析
  5. scipy.cluster模块实现kmeans聚类
  6. DragControl
  7. html库存代码,库存汇总.html
  8. linux uwsgi 非root,nginx – 只能用root运行uwsgi
  9. python自动化办公 51cto_利用python实现批量自动化运维脚本案例
  10. requests请求报字符编码异常信息