org.springframework.batch.repeat.support
Class ThrottleLimitResultQueue<T>

java.lang.Object
  extended by org.springframework.batch.repeat.support.ThrottleLimitResultQueue<T>

public class ThrottleLimitResultQueue<T>
extends Object

An implementation of the ResultQueue that throttles the number of expected results, limiting it to a maximum at any given time.

Author:
Dave Syer

Constructor Summary
ThrottleLimitResultQueue(int throttleLimit)
           
 
Method Summary
 void expect()
          Tell the queue to expect one more result.
 boolean isEmpty()
          Used by master thread to verify that there are results available from take() without possibly having to block and wait.
 boolean isExpecting()
          Check if any results are expected.
 void put(T holder)
          Once it is expecting a result, clients call this method to satisfy the expectation.
 T take()
          Gets the next available result, blocking if there are none yet available.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ThrottleLimitResultQueue

public ThrottleLimitResultQueue(int throttleLimit)
Parameters:
throttleLimit - the maximum number of results that can be expected at any given time.
Method Detail

isEmpty

public boolean isEmpty()
Used by master thread to verify that there are results available from take() without possibly having to block and wait.

Returns:
true if there are no results available

isExpecting

public boolean isExpecting()
Check if any results are expected. Usually used by master thread to drain queue when it is finished.

Returns:
true if more results are expected, but possibly not yet available.

expect

public void expect()
            throws InterruptedException
Tell the queue to expect one more result. Blocks until a new result is available if already expecting too many (as determined by the throttle limit).

Throws:
InterruptedException - if the call blocks and is then interrupted.
See Also:
ResultQueue.expect()

put

public void put(T holder)
         throws IllegalArgumentException
Once it is expecting a result, clients call this method to satisfy the expectation. In a master-worker pattern, the workers call this method to deposit the result of a finished task on the queue for collection.

Parameters:
holder - the result for later collection.
Throws:
IllegalArgumentException - if the queue is not expecting a new result

take

public T take()
       throws NoSuchElementException,
              InterruptedException
Gets the next available result, blocking if there are none yet available.

Returns:
a result previously deposited
Throws:
NoSuchElementException - if there is no result expected
InterruptedException - if the operation is interrupted while waiting


Copyright © 2013 SpringSource. All Rights Reserved.