import java.util.concurrent.BlockingQueue;

import java.util.concurrent.LinkedBlockingQueue;

/**

* Created with IntelliJ IDEA.

* User: csx

* Date: 4/24/14

* Time: 9:56 AM

* To change this template use File | Settings | File Templates.

*

* 生产者与消费者模型中,要保证以下几点:

* 1 同一时间内只能有一个生产者生产

* 2 同一时间内只能有一个消费者消费

* 3 生产者生产的同时消费者不能消费

* 4 消费者消费的同时生产者不能生产

* 5 共享空间空时消费者不能继续消费

* 6 共享空间满时生产者不能继续生产

*

* 使用并发库中的BlockingQueue(阻塞队列) 实现生产者与消费者

*/

public class WaitNoticeDemo {

public static void main(String[] args) {

//固定容器大小为10

BlockingQueue foods = new LinkedBlockingQueue(10);

Thread produce = new Thread(new Produce(foods));

Thread consume = new Thread(new Consume(foods));

produce.start();

consume.start();

}

}

/**

* 生产者

*/

class Produce implements Runnable{

private BlockingQueue foods;

Produce(BlockingQueue foods) {

this.foods = foods;

}

@Override

public void run() {

int i = 0;

while (true){

try {

//当生产的食品数量装满了容器,那么在while里面该食品容器(阻塞队列)会自动阻塞  wait状态 等待消费

foods.put(new Food("食品"+i));

i++;

} catch (InterruptedException e) {

e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.

}

}

}

}

/**

* 消费者

*/

class Consume implements Runnable {

private BlockingQueue foods;

Consume(BlockingQueue foods){

this.foods = foods;

}

@Override

public void run() {

try {

Thread.sleep(1000);  //用于测试当生产者生产满10个食品后是否进入等待状态

while (true){

//当容器里面的食品数量为空时,那么在while里面该食品容器(阻塞队列)会自动阻塞  wait状态 等待生产

Food food = foods.take();

System.out.println("消费"+food.getName());

}

} catch (InterruptedException e) {

e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.

}

}

}

/**

* 食品

*/

class Food{

private String name;

String getName() {

return name;

}

Food(String name){

this.name = name;

System.out.println("生产"+name);

}

}

如有不足 还请大家留言纠正修改。

java多线程队列_java多线程消费者生产者模式(BlockingQueue 通过阻塞队列实现)相关推荐

  1. BlockingQueue(阻塞队列)详解

    推荐:Java并发编程汇总 BlockingQueue(阻塞队列)详解 原文地址 BlockingQueue 一. 前言 在新增的Concurrent包中,BlockingQueue很好的解决了多线程 ...

  2. 多线程之消费者生产者模式加入阻塞队列

    队列相关资料: http://chenjumin.iteye.com/blog/2182322 http://blog.csdn.net/luohuacanyue/article/details/16 ...

  3. 多线程-并发编程(7)-生产者消费者模式及非阻塞队列与阻塞队列实现

    生产者消费者模式是一个十分经典的多线程协作模式 弄懂生产者消费者问题能够让我们对多线程编程的理解更加深刻 存在3个元素 1.生产者(类比厨师) 2.生产者的生产产品(类比美食) 3.消费者(类比吃货) ...

  4. java线程池_Java多线程并发:线程基本方法+线程池原理+阻塞队列原理技术分享...

    线程基本方法有哪些? 线程相关的基本方法有 wait,notify,notifyAll,sleep,join,yield 等. 线程等待(wait) 调用该方法的线程进入 WAITING 状态,只有等 ...

  5. java 多线程 总结_Java 多线程总结

    昨天熬了个通宵,看了一晚上的视频,把java 的多线程相关技术重新复习了一遍,下面对学习过程中遇到的知识点进行下总结. 首先我们先来了解一下进程.线程.并发执行的概念: 进程是指:一个内存中运行的应用 ...

  6. java 多线程 选择题_Java多线程之三道多线程练习题

    三道多线程练习题 接下来,我们来做三道题: 第一题:现有的程序代码模拟产生了16个日志对象,并且需要运行16秒才能打印完这些日志,请在程序中增加4个线程去调用parseLog()方法来分头打印这16个 ...

  7. java并发多线程面试_Java多线程并发面试问答

    java并发多线程面试 Today we will go through Java Multithreading Interview Questions and Answers. We will al ...

  8. java 多线程 压缩_Java 多线程拷贝文件夹并调用tinyPng算法接口压缩图片实现(生产消费变种)...

    线程模型 生产者Provider线程为一,主要进行深搜目录文件:. 消费者Consumer线程多个, 因为RPC服务调用时延较长, 启用多个线程请求服务. 持久化线程Persist 将已经消费的消息存 ...

  9. java线程钥匙_Java多线程并发编程/锁的理解

    一.前言 最近项目遇到多线程并发的情景(并发抢单&恢复库存并行),代码在正常情况下运行没有什么问题,在高并发压测下会出现:库存超发/总库存与sku库存对不上等各种问题. 在运用了 限流/加锁等 ...

最新文章

  1. 生日快乐程序_亲爱的陕师大:75岁生日快乐!一起走过师大时光,在线生成你的师大印迹!...
  2. 关于字符编码,你所需要知道的
  3. CSS3常用属性及用法
  4. 新图表请查收!看够了炫酷大屏,这次来点小清新风格!
  5. 职称计算机承诺书,职称申报承诺书范本
  6. php大文件下載,使用apache/nginx x-sendFile模塊替換
  7. C/C++[codeup 2044]神奇的口袋
  8. SQL Statements
  9. Automatic classification of defective photovoltaic module cells in electroluminescence images-论文阅读笔记
  10. uniApp入门(一)
  11. mysql引擎怎么选
  12. 【搞定工作】无惧尾款,打工就要来这里!
  13. igh ethercat应用层代码分析
  14. DB2 -SQLSTATE
  15. APP自动化定位方法
  16. 微信网页版协议分析和实现机器人
  17. 多个绝对值相加求最大值问题_多个绝对值相加求最值问题
  18. OpenCV之ROI和泛洪填充
  19. Sigmoid、Tanh、ReLU、Leaky_ReLU、SiLU、Mish函数python实现
  20. 海牛 Hadoop 系列教程(一):服务器基础环境

热门文章

  1. 设置axios默认访问前缀
  2. tomcat内存溢出
  3. Vue + Spring Boot 项目实战(七):前端路由与登录拦截器
  4. flexcell控件 许可证信息没有找到_报表控件 ActiveReports 全面迎来 .Net Core 时代
  5. 听障学生计算机课本,面向听障学生程序设计的计算机教学辅助系统
  6. java 对象复制 反射_利用Java反射机制实现对象相同字段的复制操作
  7. BugkuCTF-MISC题猫片
  8. BugkuCTF-Reverse题SafeBox(NJCTF)
  9. 华为5g鸿蒙折叠,华为5G折叠概念新机:内折叠+麒麟9000+鸿蒙OS 这才是华为的实力...
  10. php语句结束标记,PHP结束标记“?”