- 浏览: 276724 次
- 性别:
- 来自: 长沙
文章分类
最新评论
-
CodeLove:
如果包含<,(,)...等特殊字符呢
Python变量名检测 -
zlxzlxzlxzlxzlx:
这不能算是任意进制之间的转换,只能算是 2、8、10、16 几 ...
java实现的任意进制转换 -
mychaoyue2011:
在本地执行了几遍,结果都是:s2开始休眠s1开始休眠s2休眠结 ...
Java线程学习笔记(四)线程join -
chxiaowu:
不错!
Java版的树 -
TenAclock:
这个例子 做不到“学生都交完” 考试结束,只能做到等到考试时间 ...
Java线程学习笔记(十一) DelayQueue的应用
用多线程来模拟生产者消费者问题。用到BlockingQueue来实现更方便和安全。
模拟一个厨师生成产品,消费者消费,当产品数大于10的时候厨师休息,但产品数不够时厨师接着工作。
package com.woxiaoe.study.thread; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; /** * 生产者 消费者 模拟 * @author 小e * * 2010-4-29 下午09:32:43 */ class Cook implements Runnable{ private int productId; private BlockingQueue<Product> products; private boolean rest; public Cook(BlockingQueue<Product> products) { this.products = products; } public void product(){ Product product = new Product(productId ++ ); System.out.println("生产了" + product); products.add(product); } public boolean isRest() { return rest; } public void setRest(boolean rest){ this.rest = rest; } @Override public void run() { try { while (!Thread.interrupted()) { synchronized (this) { while(products.size() >= 10){ System.out.println("有剩余产品,厨师休息…………"); rest = true; wait(); } } product();// 50ms生产一个 TimeUnit.MILLISECONDS.sleep(50); } } catch (InterruptedException e) { // TODO Auto-generated catch block System.out.println("停止生产!"); } } } class Product{ private int productId; Product(int productId){ this.productId = productId; } public int getProductId() { return productId; } @Override public String toString() { return "产品" + productId; } } class Customer implements Runnable{ private BlockingQueue<Product> products; private String name; private Cook cook; public Customer(Cook cook,BlockingQueue<Product> products, String name) { this.cook = cook; this.products = products; this.name = name; } public void consume(){ try { Product product = products.take(); System.out.println(name + " 消费" + product); } catch (InterruptedException e) { // TODO Auto-generated catch block } } @Override public void run() { try { while (!Thread.interrupted()) { consume();// 500消费一个 synchronized (cook) { if(products.size() == 0 && cook.isRest()){ cook.setRest(false); cook.notifyAll(); System.out.println("库存不够,厨师开始工作……"); } } TimeUnit.MILLISECONDS.sleep(500); } } catch (InterruptedException e) { // TODO Auto-generated catch block System.out.println("用户:" + name + "停止消费!"); } } } public class Restaurant { private Cook cook; public Restaurant(Cook cook) { this.cook = cook; } public static void main(String[] args) throws InterruptedException { System.out.println("饭馆开门"); ExecutorService exec = Executors.newCachedThreadPool(); BlockingQueue<Product> products = new LinkedBlockingQueue<Product>(); Cook cook = new Cook(products); Restaurant restaurant = new Restaurant(cook); exec.execute(cook); for(int i = 0; i < 5; i++){ exec.execute(new Customer(cook,products, "用户" + i)); } TimeUnit.SECONDS.sleep(2);//模拟五秒 exec.shutdownNow(); System.out.println("饭馆关门"); } }
Output:
饭馆开门
生产了产品0
用户0 消费产品0
生产了产品1
用户1 消费产品1
生产了产品2
用户2 消费产品2
生产了产品3
用户4 消费产品3
生产了产品4
用户3 消费产品4
生产了产品5
生产了产品6
生产了产品7
生产了产品8
生产了产品9
用户0 消费产品5
生产了产品10
用户1 消费产品6
生产了产品11
用户2 消费产品7
生产了产品12
用户4 消费产品8
生产了产品13
用户3 消费产品9
生产了产品14
生产了产品15
生产了产品16
生产了产品17
生产了产品18
生产了产品19
用户0 消费产品10
生产了产品20
用户1 消费产品11
生产了产品21
用户2 消费产品12
生产了产品22
用户4 消费产品13
生产了产品23
用户3 消费产品14
生产了产品24
有剩余产品,厨师休息…………
用户0 消费产品15
用户1 消费产品16
用户2 消费产品17
用户4 消费产品18
用户3 消费产品19
用户0 消费产品20
用户:用户2停止消费!
停止生产!
用户:用户1停止消费!
用户:用户0停止消费!
用户:用户3停止消费!
用户:用户4停止消费!
饭馆关门
发表评论
-
Consider the following code: What will be printed?
2010-09-24 20:30 941Consider the following code: Wh ... -
Java 基础复习笔记一
2010-06-04 02:03 1112这两天复习java的基础知识,把一些自己认为比较有用的点记录下 ... -
Java 转义字符
2010-06-03 21:21 977\n 回车(\u000a) \t 水平制表符(\u0009) ... -
生产消费者的模拟
2010-05-27 23:16 1632采用Java 多线程技术,设计实现一个符合生产者和消费者问题的 ... -
Java 控制台下显示文件结构
2010-05-27 00:10 3237题目: 编写一个Java ... -
Java得到类目录
2010-05-26 23:22 1159String path = MainTest.class.ge ... -
Java文件压缩
2010-05-23 21:54 1201package com.woxiaoe.study.io ... -
UDP传输图片的尝试
2010-05-22 18:05 9793UDP是不可靠的,发送的数据不一定会到达,且顺序不一定 ... -
【转载】Java String.Format() 方法及参数说明
2010-05-15 22:18 1303JDK1.5中,String类新增了一个很有用的静态方法S ... -
【转载】String.format函数使用方法介绍
2010-05-15 22:17 1169http://edu.codepub.com/2009/111 ... -
Java线程学习笔记(十一) DelayQueue的应用
2010-05-01 00:34 15587DelayQueue 是一个无界的BlockingQueue ... -
Java线程学习笔记(十)CountDownLatch 和CyclicBarrier
2010-04-30 21:04 2789CountDownLatch : 一个同步辅助类,在完成一组 ... -
Java线程学习笔记(八)线程之间的协作
2010-04-26 23:13 1759wait()与notifyAll() 调用sleep ... -
Java线程学习笔记(七)java中递增不是原子性
2010-04-24 23:00 2895以下为测试代码,通过一个自增函数得到最新的值,玩Set你存,看 ... -
Java线程学习笔记(六)在其他对象上同步
2010-04-24 22:47 1337package com.woxiaoe.study.threa ... -
Java线程学习笔记(五)资源共享问题
2010-04-24 21:04 1250IncreaseClient 中持有一个base,每次调用起i ... -
Java线程学习笔记(四)线程join
2010-04-24 20:06 1264《Java编程思想》的一个例子,如果某个线程在另一个线程t上调 ... -
基于java的图(四) 强连通组件
2010-04-22 21:06 1525有向图中, u可达v不一定意味着v可达u. 相互可达则属于同一 ... -
基于java的图(三) 图的拓扑排序
2010-04-21 16:14 1854相关: 基于java的图的实现 基于java ... -
基于java的图的实现(二) 图的两种遍历
2010-04-20 21:51 2084图的实现见http://www.iteye.com/topic ...
相关推荐
java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型...
java多线程实现生产者和消费者
java线程学习笔记
编写一个“生产者-消费者”的多线程演示程序,两个生产者,一个消费者,可以存放产品的仓库容量为10,仓库用栈实现,并有同步功能,且能防止先消费后生产的情况。
使用wait()和notify()实现的生产者与消费者模型,可以了解如何使用wait()和notify()进行线程间通信。(上一次上传的代码有一个问题没有考虑到,这次修补了——CSDN没法撤销资源,只能再上传了)
用java多线程简易实现生产者消费者模式的代码,用java多线程简易实现生产者消费者模式的代码。
用java多线程,实现生产者消费者同步和互斥的问题,操作系统中的经典问题
本代码是用JAVA实现的生产者与消费者的问题,线程间的同步与互斥功能
java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现...
Java线程:概念与原理 2 一、操作系统中线程和进程的概念 2 二、Java中的线程 3 三、Java中关于线程的名词解释...Java线程:并发协作-生产者消费者模型 52 Java线程:并发协作-死锁 55 Java线程:线程之间的数据传递 58
a: 创建一个线程 ...h: problem1 生产者消费者问题 (1生产者 1消费者 1缓冲区) problem1 more 生产者消费者问题 (1生产者 2消费者 4缓冲区) problem2 读者与写着问题 I: 信号量 semaphore 解决线程同步问题
java线程实现的生产者和消费者的程序java线程实现的生产者和消费者的程序
该资源包含了一个java线程安全以及生产者消费者demo,可以参考博客:
java多线程学习,生产者消费者问题示例
基本满足操作系统课上要求,java实现的生产者消费者模型。
java多线程实现生产者消费者关系,完成线程之间的同步。
用Java实现消费者与生产者两个线程进行调度
生产者消费者问题 Java实现 线程同步 线程通信生产者消费者问题 Java实现 线程同步 线程通信生产者消费者问题 Java实现 线程同步 线程通信
学习Java线程之并发协作生产者消费者模型.pdf