package org.eclipse.dltk.dbgp.internal.packets; import java.util.LinkedList; public final class DbgpPacketWaiter { private static final String DBGP_PACKET_RECEIVER_PACKET_WAITER_TERMINATED = Messages.DbgpPacketReceiver_packetWaiterTerminated; private final LinkedList queue; private boolean terminated; public DbgpPacketWaiter() { terminated = false; this.queue = new LinkedList(); } public synchronized void put(DbgpPacket obj) { queue.addLast(obj); notifyAll(); } public synchronized DbgpPacket waitPacket() throws InterruptedException { while (!terminated && queue.isEmpty()) { wait(); } if (terminated) { throw new InterruptedException( DBGP_PACKET_RECEIVER_PACKET_WAITER_TERMINATED); } return (DbgpPacket) queue.removeFirst(); } public synchronized void terminate() { terminated = true; notifyAll(); } }