ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/main/java/util/concurrent/Future.java
Revision: 1.3
Committed: Thu May 29 13:21:28 2003 UTC (21 years ago) by dl
Branch: MAIN
CVS Tags: JSR166_PRELIMINARY_TEST_RELEASE_1, JSR166_PRERELEASE_0_1
Changes since 1.2: +2 -3 lines
Log Message:
Cancellation support in TPE

File Contents

# Content
1 /*
2 * @(#)Future.java
3 */
4
5 package java.util.concurrent;
6
7 /**
8 * A <tt>Future</tt> represents the result of an asynchronous computation.
9 * Methods are provided to check if the computation is complete,
10 * to wait for its completion, and to retrieve the result of the
11 * computation. The result can only be retrieved when the computation
12 * has completed. The <tt>get</tt> method will block until the computation
13 * has completed. Once the computation has completed, the result cannot
14 * be changed, nor can the computation be restarted or cancelled.
15 *
16 * <p>
17 * <b>Sample Usage</b> <p>
18 * <pre>
19 * class Image { ... };
20 * class ImageRenderer { Image render(byte[] raw); }
21 * class App {
22 * Executor executor = ...
23 * ImageRenderer renderer = ...
24 * void display(final byte[] rawimage) throws InterruptedException {
25 * Future futureImage =
26 * new FutureTask(new Callable() {
27 * public Object call() {
28 * return renderer.render(rawImage);
29 * }});
30 * executor.execute(futureImage);
31 * drawBorders(); // do other things while executing
32 * drawCaption();
33 * try {
34 * drawImage((Image)(futureImage.get())); // use future
35 * }
36 * catch (ExecutionException ex) { cleanup(); return; }
37 * }
38 * }
39 * </pre>
40 *
41 * @since 1.5
42 * @see FutureTask
43 * @see Executor
44 *
45 * @spec JSR-166
46 * @revised $Date: 2003/05/27 18:14:40 $
47 * @editor $Author: dl $
48 */
49 public interface Future<V> {
50
51 /**
52 * Returns <tt>true</tt> if the underlying task has completed.
53 *
54 * @fixme relation to isDone in Cancellable?
55 *
56 * @return <tt>true</tt> if underlying task has completed
57 */
58 boolean isDone();
59
60 /**
61 * Waits if necessary for computation to complete, and then
62 * retrieves its result.
63 *
64 * @return computed result
65 * @throws CancellationException here???
66 * @throws ExecutionException if underlying computation threw an exception
67 * @throws InterruptedException if current thread was interrupted while waiting
68 */
69 V get() throws InterruptedException, ExecutionException;
70
71 /**
72 * Waits if necessary for at most the given time for the computation
73 * to complete, and then retrieves its result.
74 *
75 * @param timeout the maximum time to wait
76 * @param granularity the time unit of the timeout argument
77 * @return computed result
78 * @throws ExecutionException if underlying computation threw an exception
79 * @throws InterruptedException if current thread was interrupted while waiting
80 * @throws TimeoutException if the wait timed out
81 */
82 V get(long timeout, TimeUnit granularity)
83 throws InterruptedException, ExecutionException, TimeoutException;
84 }
85
86
87