01: /*
02: File: Takable.java
03:
04: Originally written by Doug Lea and released into the public domain.
05: This may be used for any purposes whatsoever without acknowledgment.
06: Thanks for the assistance and support of Sun Microsystems Labs,
07: and everyone contributing, testing, and using this code.
08:
09: History:
10: Date Who What
11: 11Jun1998 dl Create public version
12: */
13:
14: package org.logicalcobwebs.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>]
25: * @see Channel
26: * @see Puttable
27: **/
28:
29: public interface Takable {
30:
31: /**
32: * Return and remove an item from channel,
33: * possibly waiting indefinitely until
34: * such an item exists.
35: * @return some item from the channel. Different implementations
36: * may guarantee various properties (such as FIFO) about that item
37: * @exception InterruptedException if the current thread has
38: * been interrupted at a point at which interruption
39: * is detected, in which case state of the channel is unchanged.
40: *
41: **/
42: public Object take() throws InterruptedException;
43:
44: /**
45: * Return and remove an item from channel only if one is available within
46: * msecs milliseconds. The time bound is interpreted in a coarse
47: * grained, best-effort fashion.
48: * @param msecs the number of milliseconds to wait. If less than
49: * or equal to zero, the operation does not perform any timed waits,
50: * but might still require
51: * access to a synchronization lock, which can impose unbounded
52: * delay if there is a lot of contention for the channel.
53: * @return some item, or null if the channel is empty.
54: * @exception InterruptedException if the current thread has
55: * been interrupted at a point at which interruption
56: * is detected, in which case state of the channel is unchanged
57: * (i.e., equivalent to a false return).
58: **/
59:
60: public Object poll(long msecs) throws InterruptedException;
61:
62: }
|