import java.util.*;
/**
* A queue. One thread calls push() to put an object on the queue.
* Another calls pop() to get an object off the queue. If there is no
* data, pop() waits until there is some, using wait()/notify().
* wait() and notify() must be used within a synchronized method or
* block. In Java 5.0, use a java.util.concurrent.BlockingQueue instead.
*/
public class WaitingQueue<E> {
LinkedList<E> q = new LinkedList<E>(); // Where objects are stored
public synchronized void push(E o) {
q.add(o); // Append the object to the end of the list
this.notifyAll(); // Tell waiting threads that data is ready
}
public synchronized E pop() {
while(q.size() == 0) {
try { this.wait(); }
catch (InterruptedException ignore) {}
}
return q.remove(0);
}
}
|