1
2
3
4
5
6
7
8
9
10
11
12
13
14 package org.jdiagnose.concurrent;
15
16 /***
17 * This interface exists to enable stricter type checking
18 * for channels. A method argument or instance variable
19 * in a producer object can be declared as only a Puttable
20 * rather than a Channel, in which case a Java compiler
21 * will disallow take 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 Takable
27 **/
28
29 public interface Puttable {
30
31
32 /***
33 * Place item in the channel, possibly waiting indefinitely until
34 * it can be accepted. Channels implementing the BoundedChannel
35 * subinterface are generally guaranteed to block on puts upon
36 * reaching capacity, but other implementations may or may not block.
37 * @param item the element to be inserted. Should be non-null.
38 * @exception InterruptedException if the current thread has
39 * been interrupted at a point at which interruption
40 * is detected, in which case the element is guaranteed not
41 * to be inserted. Otherwise, on normal return, the element is guaranteed
42 * to have been inserted.
43 **/
44 public void put(Object item) throws InterruptedException;
45
46
47 /***
48 * Place item in channel only if it can be accepted within
49 * msecs milliseconds. The time bound is interpreted in
50 * a coarse-grained, best-effort fashion.
51 * @param item the element to be inserted. Should be non-null.
52 * @param msecs the number of milliseconds to wait. If less than
53 * or equal to zero, the method does not perform any timed waits,
54 * but might still require
55 * access to a synchronization lock, which can impose unbounded
56 * delay if there is a lot of contention for the channel.
57 * @return true if accepted, else false
58 * @exception InterruptedException if the current thread has
59 * been interrupted at a point at which interruption
60 * is detected, in which case the element is guaranteed not
61 * to be inserted (i.e., is equivalent to a false return).
62 **/
63 public boolean offer(Object item, long msecs) throws InterruptedException;
64 }