001: /*
002: * ====================================================================
003: *
004: * The Apache Software License, Version 1.1
005: *
006: * Copyright (c) 1999 The Apache Software Foundation. All rights
007: * reserved.
008: *
009: * Redistribution and use in source and binary forms, with or without
010: * modification, are permitted provided that the following conditions
011: * are met:
012: *
013: * 1. Redistributions of source code must retain the above copyright
014: * notice, this list of conditions and the following disclaimer.
015: *
016: * 2. Redistributions in binary form must reproduce the above copyright
017: * notice, this list of conditions and the following disclaimer in
018: * the documentation and/or other materials provided with the
019: * distribution.
020: *
021: * 3. The end-user documentation included with the redistribution, if
022: * any, must include the following acknowlegement:
023: * "This product includes software developed by the
024: * Apache Software Foundation (http://www.apache.org/)."
025: * Alternately, this acknowlegement may appear in the software itself,
026: * if and wherever such third-party acknowlegements normally appear.
027: *
028: * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
029: * Foundation" must not be used to endorse or promote products derived
030: * from this software without prior written permission. For written
031: * permission, please contact apache@apache.org.
032: *
033: * 5. Products derived from this software may not be called "Apache"
034: * nor may "Apache" appear in their names without prior written
035: * permission of the Apache Group.
036: *
037: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
038: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
039: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
040: * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
041: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
042: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
043: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
044: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
045: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
046: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
047: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
048: * SUCH DAMAGE.
049: * ====================================================================
050: *
051: * This software consists of voluntary contributions made by many
052: * individuals on behalf of the Apache Software Foundation. For more
053: * information on the Apache Software Foundation, please see
054: * <http://www.apache.org/>.
055: *
056: */
057: package org.apache.catalina.util;
058:
059: import java.util.Vector;
060:
061: /**
062: * A simple FIFO queue class which causes the calling thread to wait
063: * if the queue is empty and notifies threads that are waiting when it
064: * is not empty.
065: *
066: * @author Anil V (akv@eng.sun.com)
067: */
068: public class Queue {
069: private Vector vector = new Vector();
070:
071: /**
072: * Put the object into the queue.
073: *
074: * @param object the object to be appended to the
075: * queue.
076: */
077: public synchronized void put(Object object) {
078: vector.addElement(object);
079: notify();
080: }
081:
082: /**
083: * Pull the first object out of the queue. Wait if the queue is
084: * empty.
085: */
086: public synchronized Object pull() {
087: while (isEmpty())
088: try {
089: wait();
090: } catch (InterruptedException ex) {
091: }
092: return get();
093: }
094:
095: /**
096: * Get the first object out of the queue. Return null if the queue
097: * is empty.
098: */
099: public synchronized Object get() {
100: Object object = peek();
101: if (object != null)
102: vector.removeElementAt(0);
103: return object;
104: }
105:
106: /**
107: * Peek to see if something is available.
108: */
109: public Object peek() {
110: if (isEmpty())
111: return null;
112: return vector.elementAt(0);
113: }
114:
115: /**
116: * Is the queue empty?
117: */
118: public boolean isEmpty() {
119: return vector.isEmpty();
120: }
121:
122: /**
123: * How many elements are there in this queue?
124: */
125: public int size() {
126: return vector.size();
127: }
128: }
|