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 }