微软100题-天天做-第34题
2014-03-30 16:47
274 查看
34.(队列)
实现一个队列。
队列的应用场景为:
一个生产者线程将int类型的数入列,一个消费者线程将int类型的数出列
实现一个队列。
队列的应用场景为:
一个生产者线程将int类型的数入列,一个消费者线程将int类型的数出列
package com.microsoft; public class ProducerComsumerQueue { private int[]data; private int start; private int end; //private Object objectGet=new Object(); //private Object objectPut=new Object(); public ProducerComsumerQueue(int size){ data=new int[size]; } public synchronized void put(int value)throws Exception{ if(start==data.length-1&&end==0){ this.wait(); } if(end-start==1){ this.wait(); } if(start==data.length-1){ start=0; data[start]=value; }else{ data[++start]=value; } this.notify(); } public synchronized int get()throws Exception{ if(start==end){ this.wait(); } int ret=-1; if(end==data.length-1){ ret=data[end]; end=0; this.notify(); }else{ ret=data[end++]; this.notify(); } return ret; } public static void main(String[] args) { ProducerComsumerQueue queue=new ProducerComsumerQueue(10); Comsumer c=new Comsumer(queue); Producer p=new Producer(queue); c.start(); p.start(); } } class Comsumer extends Thread{ private ProducerComsumerQueue queue; public Comsumer(ProducerComsumerQueue queue){ this.queue=queue; } @Override public void run() { int i=0; while(true){ try{ queue.put(i++); Thread.sleep(500); }catch(Exception e){ e.printStackTrace(); } } } } class Producer extends Thread{ private ProducerComsumerQueue queue; public Producer(ProducerComsumerQueue queue){ this.queue=queue; } @Override public void run() { while(true){ try{ System.out.println(queue.get()); Thread.sleep(1000); }catch(Exception e){ e.printStackTrace(); } } } }
相关文章推荐
- iOS 简单的table实现
- android开发中判断手机是否联网
- OpenJWeb组建合作团队,诚需以下合作者加盟
- map的用法举例: 按属性实现数据分组
- AIX 5.3 安装valgrind 3.4.1
- win7修改mac地址的三种方法
- 文件中读数据完成工资输入
- Android数据存储之SharedPreferences 共享首选项/偏好设置
- 设计模式之建造者模式(生成器模式、Builder)摘录
- 设计模式之建造者模式(生成器模式、Builder)摘录
- logcat 罢工了
- 解决远程桌面连接时闪一下消失不出现登陆界面的问题
- qt字库的移植(使其很好的显示中文)
- JavaBean总结
- Wireshark设置interface 时提示“There are no interfaces on which a capture can be done ”
- hrbust简单操作
- floodlight StaticFlowPusher 基于网段写flow,通配
- tesseract-ocr训练方法
- 用友官方主页--营销机构
- NSUserDefaults数据存储在什么地方