- 浏览: 73883 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
springdata-jpa:
java quartz定时任务demo教程源代码下载,地址:h ...
Quartz java实例解析,web应用 -
jsjxieyang:
还是不行啊,始终报错
aop导入包注意事项
package star20110712; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; public class Restaurant { Meal meal; ExecutorService executorService = Executors.newCachedThreadPool(); Waiter waiter = new Waiter(this); Chef chef = new Chef(this); // List<Waiter> waiters; // List<Chef> chefs; public Restaurant() { // waiters = new ArrayList<Waiter>(); // chefs = new ArrayList<Chef>(); // // for(int i= 0;i<5;i++){ // Waiter waiter = new Waiter(this); // waiters.add(waiter); // Chef chef = new Chef(this); // chefs.add(chef); // } executorService.execute(waiter); executorService.execute(chef); } public static void main(String[] args) { new Restaurant(); } } class Meal{ //用final修饰,在多线程中,可以增加其值 private final int orderNum; public Meal(int orderNum) { this.orderNum = orderNum; } @Override public String toString() { return "Meal:"+orderNum; } } class Waiter implements Runnable{ private Restaurant restaurant; public Waiter(Restaurant restaurant) { this.restaurant = restaurant; } @Override public void run() { try { while(!Thread.interrupted()){ synchronized(this){ while(restaurant.meal == null){ wait(); } } System.out.println("Waiter got:"+restaurant.meal); synchronized (restaurant.chef) { restaurant.meal = null; // restaurant.chef.notifyAll(); restaurant.chef.notify(); } } } catch (InterruptedException e) { System.out.println("服务员终止"); } } } class Chef implements Runnable{ private Restaurant restaurant; private int count = 0; public Chef(Restaurant restaurant) { this.restaurant = restaurant; } @Override public void run() { try { while(!Thread.interrupted()){ synchronized(this){ while(restaurant.meal != null){ wait(); } } System.out.println("开始销售了第"+count+"个"); if(++count == 10){ System.out.println("销售完了"); restaurant.executorService.shutdownNow(); } synchronized(restaurant.waiter){ restaurant.meal = new Meal(count); // restaurant.waiter.notifyAll(); restaurant.waiter.notify(); } TimeUnit.SECONDS.sleep(1); } } catch (InterruptedException e) { System.out.println("厨师终止"); } } }
只是单消费者,单供应者。思考多消费者时,每一位消费者,相当于每一位服务员,那么一个服务员是不是考虑一个线程?
那么在唤醒的时候使用NotifyAll(),为什么API里没有Executors执行一个Runnable数组呢,或者list。
发表评论
-
memcached 使用
2014-10-29 14:47 6551.起因,支付项目中将订单 order 信息记入到se ... -
rank() over
2014-09-03 11:14 659查询同一个用户下,最近时间订购(最近一次操作) 的集合 ... -
Jad 使用
2013-01-06 15:00 813关于jad的使用 1 下载对应的包 2.将net.sf.j ... -
JAVA 环境变量
2012-11-12 10:17 01.打开我的电脑--属性--高级--环境变量 2 ... -
工作中的递归应用
2012-09-28 08:58 0递归应用 //递归获得参数列表 privat ... -
java反编译
2012-09-24 16:48 0给力 MyEclipse6.5的反编译插件的安装 我的 ... -
环境变量设置
2012-09-24 16:47 0给力 1.打开我的电脑--属性--高级--环境变量 ... -
tomczt
2012-06-11 07:59 0111 -
界面获取值,相关方法
2012-04-20 21:13 999EL(Excepress Language表达式语 ... -
JNDI 学习地址
2012-02-16 16:53 0JNDI 学习地址 http://docs.oracle.c ... -
xml解析2
2012-01-17 17:19 0xml解析2 public static bo ... -
xml解析1
2012-01-17 17:19 0xml解析 /*jadclipse*/// De ... -
Oracle 分页查询,图片
2011-12-26 23:28 0Oracle 分页查询 package oracle; ... -
压缩文件
2011-12-26 15:10 0压缩文件 package nio.channeltest; ... -
GZIPcompress NIO 压缩文件
2011-12-26 15:08 1NIO 压缩文件 package nio.chan ... -
OIO NIO ,输入输出性能测试
2011-12-26 10:13 0OIO NIO ,输入输出性能测试 package ... -
222
2011-12-21 13:03 02 /** * 解析xml文件 * ... -
XMLRead 字符字节流的读取
2011-12-21 13:02 0XMLRead 字符字节流的读取 package Te ... -
XMLUtil2
2011-12-20 11:16 0XMLUtil2 /** * 创建用户列表信息 ... -
XMLUtil
2011-12-20 11:15 0XMLUtil package com.star.ch ...
相关推荐
生产者消费者问题解决方案 生产者消费者问题是计算机科学中的一种经典问题,描述的是在多线程环境中,多个生产者线程和消费者线程之间的协作问题。生产者线程负责生产数据,并将其存储在缓冲区中,而消费者线程则从...
多生产者,多消费者问题源代码多生产者,多消费者问题源代码多生产者,多消费者问题源代码多生产者,多消费者问题源代码多生产者,多消费者问题源代码多生产者,多消费者问题源代码多生产者,多消费者问题源代码多...
生产者消费者模式是一种多线程或并发编程中的经典设计模式,它主要用于解决系统资源的高效利用和同步问题。在C++中实现生产者消费者模式,我们可以利用C++11及更高版本提供的线程库()、互斥量()、条件变量()等...
7. **例程分析**:在提供的"生产者消费者"例程中,可能包含了创建生产者和消费者线程、初始化队列、添加数据到队列、从队列中取出数据、以及使用同步机制保证正确性的代码片段。通过对这些例程的分析和运行,可以...
在计算机科学中,"生产者消费者问题"是一个经典的并发编程模型,用于展示如何在多线程环境下有效地管理和共享资源。MFC(Microsoft Foundation Classes)是微软提供的一种C++库,用于构建Windows应用程序,它提供了...
"生产者消费者问题C++代码实现" 生产者消费者问题是一个经典的进程同步问题,该问题最早由 Dijkstra 提出,用以演示他提出的信号量机制。在同一个进程地址空间内执行的两个线程。生产者线程生产物品,然后将物品...
### 生产者与消费者实验报告知识点详述 #### 一、引言 在计算机科学领域,生产者与消费者模型是一种经典的同步机制,被广泛应用于多线程编程、操作系统设计以及分布式系统架构中。该模型主要解决的是多个进程或...
生产者消费者问题是多线程编程中的一个经典案例,它展示了如何通过线程间的协作来解决资源的同步和异步操作。在C++中,我们可以利用标准库中的互斥量(mutex)、条件变量(condition_variable)等工具来实现这个问题...
生产者消费者问题是多线程编程中的经典模型,用于展示如何高效地在多个线程之间共享资源。MFC(Microsoft Foundation Classes)是微软提供的一套面向对象的C++库,用于构建Windows应用程序。在这个问题中,我们将...
生产者消费者模式是一种经典的多线程同步问题解决方案,它源于现实世界中的生产流水线,用于描述生产者(Producer)和消费者(Consumer)之间的协作关系。在这个模式中,生产者负责生成产品并放入仓库,而消费者则从...
生产者消费者流程图; 生产者消费者流程图。
在IT领域,生产者消费者架构是一种常见的多线程或并发编程模型,用于高效地处理数据流。这个模型基于消息队列的概念,适用于各种环境,包括LabVIEW(Laboratory Virtual Instrument Engineering Workbench)这样的...
在多线程编程中,"生产者-消费者"模型是一个经典的并发问题,它涉及到了如何在多个线程间共享资源并协同工作。本示例是使用C++实现的一个解决方案,结合了Posix信号量和互斥量来确保线程安全和同步。 生产者-消费者...
生产者消费者的实现。可以自主地改变生产者,消费者的数目,和缓冲区。
此外,pv操作还可以广泛应用于各种生产者消费者问题的解决中,使得系统更为可靠和高效。 pv操作是解决生产者与消费者问题的常用方法之一。通过pv操作,我们可以确保生产者进程和消费者进程之间的同步,避免数据的...
生产者消费者问题是多线程编程中的一个经典案例,它展示了如何通过线程间的协作来解决资源的并发访问问题。在C#中,我们可以利用System.Threading命名空间提供的工具来实现这一模型。下面将详细阐述这个问题的背景、...