import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; public class TestProducerAndConsumer { @SuppressWarnings("unchecked") public static void main(String[] args) { BlockingQueue q = new ArrayBlockingQueue(2); Producer p = new Producer(q); Consumer c1 = new Consumer(q); Consumer c2 = new Consumer(q); new Thread(p).start(); new Thread(c1).start(); new Thread(c2).start(); } } class Consumer implements Runnable { private final BlockingQueue queue; Consumer(BlockingQueue q) { queue = q; } public void run() { try { while (true) { consume(queue.take()); } } catch (InterruptedException ex) { ex.printStackTrace(); } } void consume(Object x) { System.out.println("Consumer"); } } class Producer implements Runnable { @SuppressWarnings("unchecked") private final BlockingQueue queue; @SuppressWarnings("unchecked") Producer(BlockingQueue q) { queue = q; } @SuppressWarnings("unchecked") public void run() { try { while (true) { queue.put(produce()); } } catch (InterruptedException ex) { ex.printStackTrace(); } } Object produce() { System.out.println("Producer"); return new Object(); } } public class ProducerConsumer { public static void main(String[] args) { SyncStack ss = new SyncStack(); Producer p = new Producer(ss); Consumer c = new Consumer(ss); new Thread(p).start(); new Thread(p).start(); new Thread(p).start(); new Thread(c).start(); } } class WoTou { int id; WoTou(int id) { this.id = id; } public String toString() { return "WoTou : " + id; } } class SyncStack { int index = 0; WoTou[] arrWT = new WoTou[6]; public synchronized void push(WoTou wt) { while(index == arrWT.length) { try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } this.notifyAll(); arrWT[index] = wt; index ++; } public synchronized WoTou pop() { while(index == 0) { try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } this.notifyAll(); index--; return arrWT[index]; } } class Producer implements Runnable { SyncStack ss = null; Producer(SyncStack ss) { this.ss = ss; } public void run() { for(int i=0; i<20; i++) { WoTou wt = new WoTou(i); ss.push(wt); System.out.println("生产了:" + wt); try { Thread.sleep((int)(Math.random() * 200)); } catch (InterruptedException e) { e.printStackTrace(); } } } } class Consumer implements Runnable { SyncStack ss = null; Consumer(SyncStack ss) { this.ss = ss; } public void run() { for(int i=0; i<20; i++) { WoTou wt = ss.pop(); System.out.println("消费了: " + wt); try { Thread.sleep((int)(Math.random() * 1000)); } catch (InterruptedException e) { e.printStackTrace(); } } } }
- 浏览: 425805 次
- 性别:
- 来自: 珠海
文章分类
- 全部博客 (364)
- oracle (23)
- java (39)
- birt (10)
- uml (0)
- android (10)
- ubuntu (12)
- mysql (21)
- ant (1)
- lucence (1)
- Design Pattern (0)
- Data Struct (0)
- cvs svn vss (1)
- javascript (2)
- css (1)
- qtp (2)
- LoadRunner (0)
- spring3.0源码分析 (1)
- 编程经验 (2)
- 工作日志 (1)
- svn apache (2)
- vbscript (3)
- jbpm4.0-5.0 (0)
- 百度百科 (1)
- ivy (1)
- jni (0)
- drools5.1 (2)
- vss (1)
- 联系方式 (1)
- maven (2)
- jetty (1)
- webservice (0)
- Flex (45)
- 开发工具 (3)
- json (1)
- 项目配置应注意的问题 (1)
- freemarker 代码生成 (1)
- 自考 (0)
- 脚本语言 (0)
- weblogic (4)
- jar包冲突 (0)
- Nginx (2)
- Zxing (1)
- 嵌入式开发 (2)
- C# (4)
- 开发经验总结 注意事项 (1)
- CentOS 6.0 (4)
- BI (0)
- Hadoop (2)
- tomcat (3)
- db2 (1)
- sqlserver (1)
- php (5)
- thinkphp (0)
- amfphp (0)
- cognos (0)
- nutch (0)
- mongodb (9)
- nodejs (3)
- webrtc (0)
- websocket (0)
- html5 (0)
- css3 (0)
- nosql (2)
- ssdb (1)
- icommet (0)
- memcached (0)
- protocal (1)
- Linux --ssh (8)
- postgresql (8)
- sequoiadb (1)
- jquery (1)
- jvm jmx (1)
- spark (0)
- hbase (0)
- storm (0)
- netty (0)
- mina (0)
- shell (2)
- sacala (0)
- go (0)
- mac (1)
- netbean (1)
- mysql_postgresql (4)
- 消息队列 (0)
- neo4j (0)
- git (1)
- python (1)
- Perl (0)
- docker (4)
- video audio (1)
- actionscript (1)
- tensorflow (0)
- 机器学习 (0)
- 人工智能 (0)
- cas (1)
- 协程 (1)
- http (1)
- window (1)
- 内网穿透 (1)
- angular5 (0)
- vpn (2)
- AI (0)
- NLP (0)
- Spring Clound (0)
- mongoldb (1)
- 前端 (0)
最新评论
-
ping2010:
哥们最后如何解决的?
neo4j 未修改jdbc驱动中的连接用户名与密码错识 -
Gedo:
小菜求指点 ivy.xml里面怎么声明 能不说详细点 大 ...
ivy + ant+eclipse -
dongguang1082:
[color=red][/color][img][/]
条形码的工作原理和详细的内容 -
JadeLuo:
要将项目转化成Flex的项目类型才会自动生成
Flex4项目html-template文件夹解析 -
quentinyu777:
你好,我在创建Flex4SDK的Project为什么不生成ht ...
Flex4项目html-template文件夹解析
发表评论
-
ygsoft.com 性能优化与安全处理备忘
2018-09-02 20:19 698https://www.javatang.com/arch ... -
http 417
2017-11-07 22:00 389http://blog.csdn.net/silence12 ... -
websocket run shell
2017-08-04 17:03 654<!DOCTYPE html> <htm ... -
spring mvc controller 启用自动执行
2017-07-27 08:52 686import org.springframework.bean ... -
java http proxy request demo
2017-06-22 09:50 835package com.ygsoft.community.r ... -
java中使用原生DOM(org.w3c.dom.*)对xml的操作
2017-06-09 14:02 1015From http://www.cnblogs.com/hu ... -
java协程
2017-04-28 10:32 550https://blog.maxleap.cn/archive ... -
java 序列化与反序列化
2017-03-31 18:58 547protected void doPost(HttpSer ... -
SpringMVC 重写HttpMessageConverter进行Xss过滤
2016-12-01 14:44 2473https://my.oschina.net/jayhu/b ... -
idea intellij
2016-11-12 16:50 48343B4A73YYJ-eyJsaWNlbnNlSWQiOiI0 ... -
jvm垃圾回收参数配置
2016-08-25 10:04 590jvm垃圾回收参数配置 ... -
java http请求头设置强制服务端返回不同格式结果
2016-06-17 19:39 2712/* * ======================= ... -
pingpp支付 支持 android ios pc web
2016-06-15 15:04 945import com.pingplusplus.Pi ... -
防止精度丢失
2016-05-28 16:33 632// 2. 赠送礼物逻辑. BigDeci ... -
批量新增触发器
2016-02-14 17:26 410import java.io.BufferedReader; ... -
读取配置文件
2015-11-07 17:06 580protected Properties load( ... -
线上jvm进程CPU load高排查脚本-jkiller
2015-09-15 22:06 938http://www.54chen.com/java-e ... -
ne4j 入门
2015-07-15 19:12 1364http://blog.csdn.net/mn960mn/ar ... -
mysql 类型
2015-04-23 16:13 601CREATE TABLE db_set ( set ... -
redis
2015-04-20 21:15 586http://developer.baidu.com/wik ...
相关推荐
生产者消费者问题是多线程编程中的一个经典案例,它展示了如何通过线程间的协作来解决资源的同步和异步操作。在C++中,我们可以利用标准库中的互斥量(mutex)、条件变量(condition_variable)等工具来实现这个问题...
生产者消费者问题是多线程编程中的经典模型,用于展示如何在并发环境中协调生产者和消费者之间的数据处理。在这个问题中,生产者线程负责生成数据,而消费者线程则负责消费这些数据。为了保证系统的稳定性和正确性,...
生产者消费者问题是多线程编程中的一个经典案例,它展示了如何通过线程间的协作来解决资源的并发访问问题。在C#中,我们可以利用System.Threading命名空间提供的工具来实现这一模型。下面将详细阐述这个问题的背景、...
生产者消费者问题是多线程编程中的经典模型,用于模拟两个或多个并发执行的实体(生产者和消费者)共享有限资源的情况。在这个问题中,生产者负责生成数据并放入缓冲区,而消费者则从缓冲区取出数据进行处理。当缓冲...
### 生产者消费者问题解析与实现 #### 一、生产者消费者问题简介 生产者消费者问题(Producer-Consumer Problem)是计算机科学中经典的同步问题之一,通常用来展示进程间通信和同步机制。该问题涉及两个类别的进程...
在IT领域,生产者消费者问题是多线程编程中一个经典的同步问题,主要涉及进程或线程间的通信与协作。此问题描述的是一个系统中有两个角色:生产者和消费者,生产者负责生成数据,而消费者负责消费这些数据。为了保证...
C语言实现生产者消费者问题,分配具有n个缓冲区的缓冲池,作为共享资源。 定义两个资源型信号量empty 和full,empty信号量表示当前空的缓冲区数量,full表示当前满的缓冲区数量。 定义互斥信号量mutex,当某个进程...
a: 创建一个线程 ...h: problem1 生产者消费者问题 (1生产者 1消费者 1缓冲区) problem1 more 生产者消费者问题 (1生产者 2消费者 4缓冲区) problem2 读者与写着问题 I: 信号量 semaphore 解决线程同步问题
### 利用管程与信号量解决生产者消费者问题 #### 概述 生产者-消费者问题是计算机科学中一个经典的问题,它用于演示进程间通信和同步的基本概念。该问题通常涉及一组生产者进程(负责生成数据)和一组消费者进程...
生产者消费者问题是多线程编程中的一个经典案例,它展示了如何通过共享资源在并发环境中实现线程间的协调。在这个问题中,"生产者"线程负责生成数据,而"消费者"线程则负责消费这些数据。MFC(Microsoft Foundation ...
生产者消费者问题进程实现 在计算机科学中,生产者消费者问题(Producer-Consumer problem)是操作系统中的一种典型问题。它描述了两个或多个进程之间的协作关系,其中一个或多个生产者进程生产数据,并将其存储在...
Java生产者消费者问题是多线程编程中的一个经典案例,它主要展示了如何通过共享资源来实现线程间的协作。这个问题源于现实生活中的生产流水线,其中生产者负责制造产品,而消费者负责消耗这些产品。在计算机系统中,...
设计目的:通过研究Linux 的进程机制和信号量实现生产者消费者问题的并发控制。说明:有界缓冲区内设有20 个存储单元,放入/取出的数据项设定为1‐20 这20 个整型数。设计要求:1)每个生产者和消费者对有界缓冲区...