//#preprocess /* ************************************************* * Copyright (c) 2010 - 2010 * HT srl, All rights reserved. * Project : RCS, RCSBlackBerry * Package : blackberry.utils * File : BlockingQueue.java * Created : 28-apr-2010 * *************************************************/ package com.android.dvci.util; //#ifdef DEBUG //#endif /** * The Class BlockingQueue. * * @author Rob Gordon. */ public final class BlockingQueue { /** * The Class ClosedException. */ public static class ClosedException extends RuntimeException { /** * Instantiates a new closed exception. */ ClosedException() { super("Queue closed."); } } private final Queue list = new VectorQueue(); // private final boolean wait = false; private boolean closed = false; /** * Close. */ public synchronized void close() { closed = true; notifyAll(); } Object blockedLock = new Object(); /** * Dequeue. * * @return the object */ public synchronized Object dequeue() { while (!closed && list.isEmpty()) { try { wait(); } catch (final InterruptedException e) { // ignore } } if (list.isEmpty()) { return null; } return list.dequeue(); } /** * Enqueue. * * @param o * the o */ public synchronized void enqueue(final Object o) { if (closed) { throw new ClosedException(); } list.enqueue(o); notifyAll(); } /** * Checks if is empty. * * @return true, if is empty */ public synchronized boolean isEmpty() { return list.isEmpty(); } /** * Open. */ public synchronized void open() { closed = false; } }