您的位置:首页 > 其它

微软100题-天天做-第34题

2014-03-30 16:47 274 查看
34.(队列)

实现一个队列。

队列的应用场景为:

一个生产者线程将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();
}
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: