java多线程队列_java多线程消费者生产者模式(BlockingQueue 通过阻塞队列实现)
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 通过阻塞队列实现)相关推荐
- BlockingQueue(阻塞队列)详解
推荐:Java并发编程汇总 BlockingQueue(阻塞队列)详解 原文地址 BlockingQueue 一. 前言 在新增的Concurrent包中,BlockingQueue很好的解决了多线程 ...
- 多线程之消费者生产者模式加入阻塞队列
队列相关资料: http://chenjumin.iteye.com/blog/2182322 http://blog.csdn.net/luohuacanyue/article/details/16 ...
- 多线程-并发编程(7)-生产者消费者模式及非阻塞队列与阻塞队列实现
生产者消费者模式是一个十分经典的多线程协作模式 弄懂生产者消费者问题能够让我们对多线程编程的理解更加深刻 存在3个元素 1.生产者(类比厨师) 2.生产者的生产产品(类比美食) 3.消费者(类比吃货) ...
- java线程池_Java多线程并发:线程基本方法+线程池原理+阻塞队列原理技术分享...
线程基本方法有哪些? 线程相关的基本方法有 wait,notify,notifyAll,sleep,join,yield 等. 线程等待(wait) 调用该方法的线程进入 WAITING 状态,只有等 ...
- java 多线程 总结_Java 多线程总结
昨天熬了个通宵,看了一晚上的视频,把java 的多线程相关技术重新复习了一遍,下面对学习过程中遇到的知识点进行下总结. 首先我们先来了解一下进程.线程.并发执行的概念: 进程是指:一个内存中运行的应用 ...
- java 多线程 选择题_Java多线程之三道多线程练习题
三道多线程练习题 接下来,我们来做三道题: 第一题:现有的程序代码模拟产生了16个日志对象,并且需要运行16秒才能打印完这些日志,请在程序中增加4个线程去调用parseLog()方法来分头打印这16个 ...
- java并发多线程面试_Java多线程并发面试问答
java并发多线程面试 Today we will go through Java Multithreading Interview Questions and Answers. We will al ...
- java 多线程 压缩_Java 多线程拷贝文件夹并调用tinyPng算法接口压缩图片实现(生产消费变种)...
线程模型 生产者Provider线程为一,主要进行深搜目录文件:. 消费者Consumer线程多个, 因为RPC服务调用时延较长, 启用多个线程请求服务. 持久化线程Persist 将已经消费的消息存 ...
- java线程钥匙_Java多线程并发编程/锁的理解
一.前言 最近项目遇到多线程并发的情景(并发抢单&恢复库存并行),代码在正常情况下运行没有什么问题,在高并发压测下会出现:库存超发/总库存与sku库存对不上等各种问题. 在运用了 限流/加锁等 ...
最新文章
- 生日快乐程序_亲爱的陕师大:75岁生日快乐!一起走过师大时光,在线生成你的师大印迹!...
- 关于字符编码,你所需要知道的
- CSS3常用属性及用法
- 新图表请查收!看够了炫酷大屏,这次来点小清新风格!
- 职称计算机承诺书,职称申报承诺书范本
- php大文件下載,使用apache/nginx x-sendFile模塊替換
- C/C++[codeup 2044]神奇的口袋
- SQL Statements
- Automatic classification of defective photovoltaic module cells in electroluminescence images-论文阅读笔记
- uniApp入门(一)
- mysql引擎怎么选
- 【搞定工作】无惧尾款,打工就要来这里!
- igh ethercat应用层代码分析
- DB2 -SQLSTATE
- APP自动化定位方法
- 微信网页版协议分析和实现机器人
- 多个绝对值相加求最大值问题_多个绝对值相加求最值问题
- OpenCV之ROI和泛洪填充
- Sigmoid、Tanh、ReLU、Leaky_ReLU、SiLU、Mish函数python实现
- 海牛 Hadoop 系列教程(一):服务器基础环境
热门文章
- 设置axios默认访问前缀
- tomcat内存溢出
- Vue + Spring Boot 项目实战(七):前端路由与登录拦截器
- flexcell控件 许可证信息没有找到_报表控件 ActiveReports 全面迎来 .Net Core 时代
- 听障学生计算机课本,面向听障学生程序设计的计算机教学辅助系统
- java 对象复制 反射_利用Java反射机制实现对象相同字段的复制操作
- BugkuCTF-MISC题猫片
- BugkuCTF-Reverse题SafeBox(NJCTF)
- 华为5g鸿蒙折叠,华为5G折叠概念新机:内折叠+麒麟9000+鸿蒙OS 这才是华为的实力...
- php语句结束标记,PHP结束标记“?”