【java基础】多线程--生产者消费者--复习
来源:互联网 发布:德旭交规软件 编辑:程序博客网 时间:2024/05/15 21:56
package thread;/** *@author kaiscript *生产者消费者 *2016年3月10日下午11:15:17 */public class ProductConsumeAgain {public static void main(String[] args) {WareHouse house = new WareHouse();PProducer producer = new PProducer(house);CConsumer consumer = new CConsumer(house);Thread t1 = new Thread(producer);Thread t2 = new Thread(consumer);t1.start();t2.start();}}class WareHouse{BBread[] breads = new BBread[6];int index = 0;public synchronized void push(BBread bread) throws InterruptedException{while(index == breads.length){//仓库满了,当前生产者线程等待this.wait();}this.notify(); //唤醒其他线程(消费者)breads[index] = bread;index++;}public synchronized BBread pop() throws InterruptedException{while(index == 0){//仓库没面包了,当前消费者线程等待this.wait();}this.notify();//唤醒其他线程(生产者)index--;return breads[index];}}/** * 生产者 */class PProducer implements Runnable{WareHouse house = null;public PProducer(WareHouse house) {this.house = house;}@Overridepublic void run() {for(int i = 0 ;i<20;i++){BBread bread = new BBread(i);try {house.push(bread); //将面包放入仓库Thread.sleep(500); //生产者生产速度快System.out.println("生产者生产了面包"+bread.id);} catch (InterruptedException e) {e.printStackTrace();}}}}/** * 消费者 */class CConsumer implements Runnable{WareHouse house = null;public CConsumer(WareHouse house) {this.house = house;}@Overridepublic void run() {for(int i=0;i<20;i++){try {BBread bread = house.pop(); //从仓库取出面包Thread.sleep(1000);System.out.println("消费者消费了面包"+bread.id);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}class BBread{int id;public BBread(int id){this.id = id;}}
0 0
- 【java基础】多线程--生产者消费者--复习
- Java基础复习:线程通信、生产者消费者
- java基础:多线程之生产者消费者问题
- java多线程 消费者-生产者
- java多线程 消费者-生产者
- java 多线程 生产者消费者
- JAVA [ 多线程 -- 生产者消费者 ]
- Java 多线程-生产者、消费者
- java多线程--生产者消费者
- java多线程-生产者消费者
- Java多线程生产者消费者
- java多线程-生产者消费者
- Java基础复习:线程通信—生产者消费者改进
- Java基础_线程_多线程_生产者消费者问题
- Java基础-多线程-生产者与消费者(笔记)
- java多线程 生产者与消费者
- java多线程 ----生产者消费者模式
- java多线程 生产者消费者问题
- Android单元测试研究与实践
- Android内存泄露总结
- ios中新特性和跳转主控制器
- sql
- 堆和堆排序
- 【java基础】多线程--生产者消费者--复习
- 【深度学习经典论文翻译1】AlexNet-ImageNet Classification with Deep Convolutional Neural Networks全文翻译
- Oracle DB查看预警日志
- tableView自定义背景图结合masonry毛玻璃特效
- Android如何连接和操作SQLite数据库
- Spark SQL的使用
- SQL查询--连接查询
- Codeforces Round #273 (Div. 2)(D)dp,滚动数组
- 编写一个程序,打印输入中单词长度的直方图。水平方向的直方图比较容易。