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();
}
}
댓글 없음:
댓글 쓰기