java wait/notify 生产者消费模式
来源:互联网 发布:软件接口是什么 编辑:程序博客网 时间:2024/04/28 06:31
本程序模拟了 一个厨师生产 两个吃货消费的场景
/** * Date:2016年9月7日下午7:56:03 * Copyright (c) 2016, www.bwbroad.com All Rights Reserved. * */package test.wait;import java.util.LinkedList;import java.util.Queue;import java.util.Random;/** * Description: TODO <br/> * Date: 2016年9月7日 下午7:56:03 <br/> * * @author xuejianxin */public class WaitTest2 {public static int CHUSHI=6;public static int CHIHUO=10;public static void main(String[] args) throws Exception {System.out.println(new Random().nextInt(10));Panzi panzi = new Panzi(2);Chushi chushi = new Chushi("厨师", panzi);chushi.start();Chushi chushi1 = new Chushi("厨师1", panzi);chushi1.start();Chihuo chihuo1 = new Chihuo("吃货1", panzi);Chihuo chihuo2 = new Chihuo("吃货2", panzi);chihuo1.start();chihuo2.start();}public static class Panzi {private int count = 0;private Queue<String> foods;public Panzi(int count) {this.count = count;foods = new LinkedList<String>();}public synchronized void put(String name,String food) {while (foods.size() >= count) {//满了, 这里必须用循环System.out.printf("%d/%d,%s 快吃啊...........................\r\n",foods.size(),this.count,name);try {this.wait();//为什么是 this.wait 是盘子在 wait 吗?????} catch (InterruptedException e) {e.printStackTrace();}}foods.offer(food);System.out.printf("%d/%d,%s----->%s\r\n",foods.size(),this.count,name,food);this.notifyAll();}public synchronized String get(String name) {while (foods.size() == 0) {//这里必须用循环System.out.printf("%d/%d,%s 我等待花儿都谢了...\r\n",foods.size(),this.count,name);try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}String food = foods.poll();System.out.printf("%d/%d,%s******>%s\r\n",foods.size(),this.count,name,food);this.notifyAll();return food;}}// 厨师类public static class Chushi extends Thread {private Panzi panzi;private String name;public Chushi(String name, Panzi panzi) {this.name = name;this.panzi = panzi;}@Overridepublic void run() {int i = 1;String s;while (true) {s = "food" + (i++);//生产一个panzi.put(this.name,s);i++;try {Thread.sleep(new Random().nextInt(CHUSHI)*100);} catch (InterruptedException e) {e.printStackTrace();}}}}// 吃货类public static class Chihuo extends Thread {private String name;private Panzi panzi;public Chihuo(String name, Panzi panzi) {this.name = name;this.panzi = panzi;}@Overridepublic void run() {while (true) {panzi.get(this.name);try {Thread.sleep(new Random().nextInt(CHIHUO)*100);} catch (InterruptedException e) {e.printStackTrace();}}}}}
0 0
- java wait/notify 生产者消费模式
- java wait()/notify() 实现生产者消费者模式
- 使用wait/notify实现生产者消费者模式
- wait()+notify实现java生产者-消费者
- java 多线程(5) wait() / notify() 生产者消费者
- java wait/notify同步模式
- 线程间通信之消费生产者模式二notify()
- Java多线程通信-利用传统的线程通信wait(),notify()方法实现“生产者消费者模式”
- Java多线程之使用wait和notify模拟生产者消费者模式
- Java中通过wait和notify来实现生产者和消费者模式
- Java多线程——使用wait/notify实现生产者/消费者模式
- 【JAVA】wait和notify用法,附生产/消费模型
- 使用Object.wait与notify实现生产者与消费者模式
- 生产者-消费者模式 系列 之一 Sychronized,Notify,Wait 篇
- Thread详解9:用wait/notify实现生产者/消费者模式
- 用wait和notify/notifyAll实现生产者消费者模式
- 多线程生产者消费者模式(wait()和notify())
- Java 多线程实现生产者消费者问题(wait/notify)
- centos/redhat6 gcc4.4 更新为 gcc4.8调试经历
- TextView ImageView组件
- oracle 单表查询 添加各种查询条件
- BGRABitmap图像操作9:用 phong 阴影制作纹理
- Unreal Engine 4 AI (二)用C++和Behavior Tree & Blackboard 实现简单追踪AI
- java wait/notify 生产者消费模式
- Reversing Linked List
- Baxter学习笔记3-示教演练篇
- 几个关于父元素、子元素的常用的js选择器
- 大数据研发(一)Hadoop平台搭建
- c++ primer plus 学习笔记(1)——复制构造函数与赋值运算符
- java condition条件队列 生产者消费模式
- 根据java内存模型理解并发出现的问题
- shh框架返回json数据给前台