Sample Usage (Note that the following classes are all made-up.)
interface ArchiveSearcher { String search(String target); }
class App {
ExecutorService executor = ...
ArchiveSearcher searcher = ...
void showSearch(final String target)
throws InterruptedException {
Future<String> future
= executor.submit(new Callable<String>() {
public String call() {
return searcher.search(target);
}});
displayOtherThings(); // do other things while searching
try {
displayText(future.get()); // use future
} catch (ExecutionException ex) { cleanup(); return; }
}
}
The FutureTask class is an implementation of Future that
implements Runnable, and so may be executed by an Executor.
For example, the above construction with submit could be replaced by:
FutureTask<String> future =
new FutureTask<String>(new Callable<String>() {
public String call() {
return searcher.search(target);
}});
executor.execute(future);
Memory consistency effects: Actions taken by the asynchronous computation happen-before actions following the corresponding Future.get() in another thread.
| Method Summary | |
|---|---|
| boolean |
Attempts to cancel execution of this task. |
| V |
Waits if necessary for the computation to complete, and then retrieves its result. |
| V |
Waits if necessary for at most the given time for the computation to complete, and then retrieves its result, if available. |
| boolean |
Returns true if this task was cancelled before it completed normally. |
| boolean |
Returns true if this task completed. |
public
boolean
isCancelled
(
)
public
boolean
isDone
(
)
After this method returns, subsequent calls to isDone() will always return true. Subsequent calls to isCancelled() will always return true if this method returned true.