LINUX.ORG.RU

Сообщения lestal

 

Java Многопоточность, Очереди

Форум — Development

Есть такой класс


**
 * A Combiner takes items from multiple input queues and feeds them into a
 * single output queue. Each input queue has a priority, which determines the
 * approximate frequency at which its items are added to the output queue. E.g.
 * if queue A has priority 9.5, and queue B has priority 0.5, then on average,
 * for every 100 items added to the output queue, 95 should come from queue A,
 * and 5 should come from queue B.
 * <p>
 * Input queues can be dynamically added and removed.
 * </p>
 */
public abstract class Combiner<T> {

    protected final SynchronousQueue<T> outputQueue;

    protected Combiner(SynchronousQueue<T> outputQueue) {
        this.outputQueue = outputQueue;
    }

    /**
     * Adds the given queue to this com.tech.task.Combiner.
     *
     * @param queue          the input queue to add to this com.tech.task.Combiner
     * @param priority       the priority to assign to the input queue
     * @param isEmptyTimeout if the input queue is seen as empty for a duration
     *                       longer than isEmptyTimeout, then it is removed from the com.tech.task.Combiner
     * @param timeUnit       the time unit of the isEmptyTimeout argument
     */
    public abstract void addInputQueue(BlockingQueue<T> queue, double priority,
                                       long isEmptyTimeout, TimeUnit timeUnit) throws CombinerException;

    /**
     * Removes the given queue from this com.tech.task.Combiner.
     *
     * @param queue the input queue to remove from this com.tech.task.Combiner
     */
    public abstract void removeInputQueue(BlockingQueue<T> queue) throws CombinerException;

    /**
     * Returns true if the given queue is currently an input queue to this com.tech.task.Combiner.
     */
    public abstract boolean hasInputQueue(BlockingQueue<T> queue);

    /**
     * Thrown to indicate a com.tech.task.Combiner specific exception.
     */
    public static class CombinerException extends Exception {
        public CombinerException() {
            super();
        }

        public CombinerException(String message) {
            super(message);
        }
    }
}

К нему нужно сделать реализацию. Есть идеи ?

 ,

lestal
()

RSS подписка на новые темы