001/*
002 *                    BioJava development code
003 *
004 * This code may be freely distributed and modified under the
005 * terms of the GNU Lesser General Public Licence.  This should
006 * be distributed with the code.  If you do not have a copy,
007 * see:
008 *
009 *      http://www.gnu.org/copyleft/lesser.html
010 *
011 * Copyright for this code is held jointly by the individual
012 * authors.  These should be listed in @author doc comments.
013 *
014 * For more information on the BioJava project and its aims,
015 * or to join the biojava-l mailing list, visit the home page
016 * at:
017 *
018 *      http://www.biojava.org/
019 *
020 */
021
022package org.biojava.utils;
023
024/**
025 * <p><code>ThreadPool</code> specifies basic thread-pooling
026 * operations such that third-party implementations may be used
027 * without requiring changes to BioJava.</p>
028 *
029 * @author Keith James
030 * @since 1.3
031 */
032public interface ThreadPool
033{
034    /**
035     * <code>addRequest</code> requests that a <code>Runnable</code>
036     * be scheduled to be run by one of the threads in the pool.
037     *
038     * @param task a <code>Runnable</code>.
039     */
040    public void addRequest(Runnable task);
041
042    /**
043     * <code>startThreads</code> starts all the threads running and
044     * opens the pool to requests.
045     */
046    public void startThreads();
047
048    /**
049     * <code>stopThreads</code> causes all running threads to stop
050     * when their current task is complete. It also closes the pool to
051     * new requests. Requests still queued are not done and the queue
052     * is emptied.
053     */
054    public void stopThreads();
055
056    /**
057     * <code>waitForThreads</code> temporarily closes the pool to new
058     * requests until such time as the current request queue has been
059     * emptied and all running tasks completed.
060     */
061    public void waitForThreads();
062}