View Javadoc
1   /*
2     File: Takable.java
3   
4     Originally written by Doug Lea and released into the public domain.
5     This may be used for any purposes whatsoever without acknowledgment.
6     Thanks for the assistance and support of Sun Microsystems Labs,
7     and everyone contributing, testing, and using this code.
8   
9     History:
10    Date       Who                What
11    11Jun1998  dl               Create public version
12  */
13  
14  package org.dbunit.util.concurrent;
15  
16  /** 
17   * This interface exists to enable stricter type checking
18   * for channels. A method argument or instance variable
19   * in a consumer object can be declared as only a Takable
20   * rather than a Channel, in which case a Java compiler
21   * will disallow put operations.
22   * <p>
23   * Full method descriptions appear in the Channel interface.
24   * <p>[<a href="http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html"> Introduction to this package. </a>]</p>
25   * 
26   * @author Doug Lea
27   * @author Last changed by: $Author$
28   * @version $Revision$ $Date$
29   * @since ? (pre 2.1)
30   * @see Channel
31   * @see Puttable
32   */
33  public interface Takable {
34  
35    /** 
36     * Return and remove an item from channel, 
37     * possibly waiting indefinitely until
38     * such an item exists.
39     * @return  some item from the channel. Different implementations
40     *  may guarantee various properties (such as FIFO) about that item
41     * @exception InterruptedException if the current thread has
42     * been interrupted at a point at which interruption
43     * is detected, in which case state of the channel is unchanged.
44     *
45    **/
46    public Object take() throws InterruptedException;
47  
48  
49    /** 
50     * Return and remove an item from channel only if one is available within
51     * msecs milliseconds. The time bound is interpreted in a coarse
52     * grained, best-effort fashion.
53     * @param msecs the number of milliseconds to wait. If less than
54     *  or equal to zero, the operation does not perform any timed waits,
55     * but might still require
56     * access to a synchronization lock, which can impose unbounded
57     * delay if there is a lot of contention for the channel.
58     * @return some item, or null if the channel is empty.
59     * @exception InterruptedException if the current thread has
60     * been interrupted at a point at which interruption
61     * is detected, in which case state of the channel is unchanged
62     * (i.e., equivalent to a false return).
63    **/
64  
65    public Object poll(long msecs) throws InterruptedException;
66  
67  }