본문

160504A(수)

LinkedList를 사용한 Queue


public class JobQueue {
private Object monitor = new Object();
private LinkedList jobs = new LinkedList();

public JobQueue() {
}

public Object pop() throws InterruptedException, NoSuchElementException {
Object o = null;
synchronized (monitor) {
if (jobs.isEmpty()) {
monitor.wait();
}
o = jobs.removeLast();
}
if (o == null) throw new NoSuchElementException();
return o;
}

public void removebyMax(int max) {
synchronized (monitor) {
if (jobs.size() > max) {
while (jobs.size() > max) {
jobs.removeFirst();
}
}
}
}

public void put(Object o) {
synchronized (monitor) {
jobs.add(o);
monitor.notify();
}
}

public void monitorStart() throws InterruptedException {
synchronized (monitor) {
monitor.notify();
}
}

public int size() {
return jobs.size();
}

public void clear() {
synchronized (monitor) {
jobs.clear();
}
}
}

Object를 사용해서 임계영역 처리를 했다.

처음보는 방법(?)이므로 잘 알아둘 것.

'Mobile > Android' 카테고리의 다른 글

170627(화) - Map  (0) 2017.06.27
160510A(화)  (0) 2016.05.10
160405A(화)  (0) 2016.04.05
160405A(화)  (0) 2016.04.05
160405A(화)  (0) 2016.04.05

공유

댓글