2008년 10월 17일 금요일

JAVA Queue (ArrayList)

import java.util.*;

class SyncQueue {
private List<Integer> buffer = new ArrayList<Integer>(100);
private boolean flag = false;
private int rear = -1, front = -1;
private int count = 0;
public synchronized int deque() {
int v;
if(count == 0) {
try {
this.wait();
}
catch (Exception ex) {}
}
rear++; // Consumer Pointer 
rear %= 100; // Queue size 
v = buffer.get(rear); 
count--; 
this.notify(); // Awake 
return v;
}
public synchronized void enqueu(int v) {

if(count == 100) { // Queue 가 꽉 찼을때 wait
try {
this.wait();
}
catch (Exception ex) {}
}
front++; // Product Pointer
if(front == 100) // Queue 가 1회 꽉찼을때 
flag = true; 
front %= 100; 

if(!flag)
buffer.add(front, v); // Queue 리스트 추가
else // Queue 가 1회 회전 하였을때 
buffer.set(front, v); // Queue 리스트  수정
count++; // Queue  
this.notify();
}
}

댓글 없음:

댓글 쓰기