edu.emory.mathcs.backport.java.util.concurrent
public interface Future
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.
FutureTask
,
Executor
Modifier and Type | Method and Description |
---|---|
boolean |
cancel(boolean mayInterruptIfRunning)
Attempts to cancel execution of this task.
|
java.lang.Object |
get()
Waits if necessary for the computation to complete, and then
retrieves its result.
|
java.lang.Object |
get(long timeout,
TimeUnit unit)
Waits if necessary for at most the given time for the computation
to complete, and then retrieves its result, if available.
|
boolean |
isCancelled()
Returns true if this task was cancelled before it completed
normally.
|
boolean |
isDone()
Returns true if this task completed.
|
boolean cancel(boolean mayInterruptIfRunning)
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.
mayInterruptIfRunning
- true if the thread executing this
task should be interrupted; otherwise, in-progress tasks are allowed
to completeboolean isCancelled()
boolean isDone()
java.lang.Object get() throws java.lang.InterruptedException, ExecutionException
CancellationException
- if the computation was cancelledExecutionException
- if the computation threw an
exceptionjava.lang.InterruptedException
- if the current thread was interrupted
while waitingjava.lang.Object get(long timeout, TimeUnit unit) throws java.lang.InterruptedException, ExecutionException, TimeoutException
timeout
- the maximum time to waitunit
- the time unit of the timeout argumentCancellationException
- if the computation was cancelledExecutionException
- if the computation threw an
exceptionjava.lang.InterruptedException
- if the current thread was interrupted
while waitingTimeoutException
- if the wait timed out