两道企业面试题(2)-生产者消费者问题
来源:互联网 发布:end.js 编辑:程序博客网 时间:2024/05/29 03:38
/* * 生产者消费者问题 */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(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.notify();arrWT[index]=wt;index++;}//消费者从框里拿出馒头public synchronized WoTou pop(){//同样,当框里没有馒头了,则休息一会while(index==0){try{ this.wait(); }catch (InterruptedException e){ e.printStackTrace(); }}this.notify();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()*1000));}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();//将返回值打印出来,但看不到WoTou的id,可以重写它的toString方法System.out.println("消费了:"+wt);try{Thread.sleep((int)(Math.random()*1000));}catch (InterruptedException e){e.printStackTrace();}}}}
运行结果:
消费了:WoTou:0生产了:WoTou:0生产了:WoTou:1消费了:WoTou:1生产了:WoTou:2生产了:WoTou:3消费了:WoTou:3消费了:WoTou:2生产了:WoTou:4消费了:WoTou:4生产了:WoTou:5消费了:WoTou:5生产了:WoTou:6生产了:WoTou:7消费了:WoTou:7消费了:WoTou:6生产了:WoTou:8消费了:WoTou:8生产了:WoTou:9消费了:WoTou:9生产了:WoTou:10消费了:WoTou:10生产了:WoTou:11生产了:WoTou:12消费了:WoTou:12生产了:WoTou:13消费了:WoTou:13消费了:WoTou:11生产了:WoTou:14消费了:WoTou:14生产了:WoTou:15消费了:WoTou:15消费了:WoTou:16生产了:WoTou:16生产了:WoTou:17消费了:WoTou:17生产了:WoTou:18消费了:WoTou:18生产了:WoTou:19消费了:WoTou:19
0 0
- 两道企业面试题(2)-生产者消费者问题
- 面试题之:生产者和消费者问题
- 面试题之:生产者和消费者问题
- 线程面试题之四:生产者消费者问题
- 两道企业面试题(1)-死锁的应用
- 之生产者与消费者问题,Lock和Condition,线程面试题
- 面试题:用 wait-notify 写一段代码来解决生产者-消费者问题
- 生产者消费者问题(信号量)
- 线程(生产者消费者问题)
- 生产者-消费者问题(操作系统)
- 生产者消费者问题(java)
- 生产者-消费者问题(转)
- 2015年阿里面试题——多线程(生产者消费者模型)
- Java多线程(2)生产者消费者问题(一)
- PV操作(生产者-消费者问题)-2【转帖】
- Java多线程 生产者消费者问题 (2)
- Java 多线程2:生产者消费者问题
- Windows线程(生产者与消费者问题)
- 两道企业面试题(1)-死锁的应用
- Struts2中redirect基本以及取不到参数值的问题解决
- 通过命令修改windows服务的描述信息
- 软件工程(C编码实践篇)
- css3中的background的新特性background-origin,background-clip,background-size详解
- 两道企业面试题(2)-生产者消费者问题
- TEST 和 TEST_F 区别
- Accelerated C++ 库算法实现字符串提取
- Android插件化学习之路(八)之DynamicLoadApk 源码解析(上)
- Matlab与数据结构 -- 搜索向量或矩阵中非零元素的位置
- 查找最频数最高的数字
- java 初探(二)
- ROS机器人程序设计(原书第2版)补充资料 (捌) 第八章 导航功能包集入门 navigation
- 2016-11-19