V
-结果类型返回这个未来的
get
方法
public interface Future<V>
Future
表示异步计算的结果。提供的方法来检查,如果计算完成,等待其完成,并检索结果的计算。结果只能检索使用方法
get
当计算完成后,如果有必要,直到阻塞。取消由
cancel
方法进行。提供了额外的方法来确定任务是否正常完成或被取消。一旦计算完成,计算不能被取消。如果你想使用一个
Future
为可的缘故,但不提供一个可用的结果,你可以声明的形式
Future<?>
回
null
类型作为结果的基本任务。
示例用法(注意下面的类都是编造的。)
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; }
}
}
的
FutureTask
类是
Future
实现
Runnable
实现,所以可以通过一个
Executor
执行。例如,与
submit
以上建设可以改成:
FutureTask<String> future =
new FutureTask<String>(new Callable<String>() {
public String call() {
return searcher.search(target);
}});
executor.execute(future);
内存一致性效果:通过异步计算 happen-before行动后,在另一个线程对应的Future.get()
采取行动。
FutureTask
,
Executor
boolean cancel(boolean mayInterruptIfRunning)
cancel
称,这个任务不应该跑。如果任务已经开始,然后
mayInterruptIfRunning
参数确定线程执行这个任务应该是为了阻止任务中断。
此方法返回后,随后调用isDone()
将总是返回true
。随后调用isCancelled()
永远如果这个方法返回的返回true
true
。
mayInterruptIfRunning
-
true
如果线程执行这个任务要中断;否则,进步任务可以完成
false
如果任务不能取消,通常是因为它已经完成了
true
否则正常;
boolean isCancelled()
true
如果这个任务完成之前取消正常。
true
如果这个任务完成之前取消
boolean isDone()
true
如果完成这个任务。完成可能是由于正常终止,例外,或取消——在所有这些情况下,此方法将返回
true
。
true
如果完成这个任务
V get() throws InterruptedException, ExecutionException
CancellationException
如果计算被取消
ExecutionException
如果计算抛出一个异常
InterruptedException
-如果当前线程被中断等待
V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException
timeout
-最大等待时间
unit
- timeout参数的时间单位
CancellationException
如果计算被取消
ExecutionException
如果计算抛出一个异常
InterruptedException
-如果当前线程被中断等待
TimeoutException
如果等待超时
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.