Future接口:
一个Future实例代表了一个异步操作(asynchronous computation)的结果。它的方法可以检查操作是否结束,是否在等待结束,检索操作的结果。操作结果只能用get方法来获得,该方法会一直
阻塞直到其准备好(获得结果)。cancel方法中止(取消)任务。附加的方法可以判断任务是正常结束或者被取消。一旦操作结束,操作就无法被取消。如果你想用一个Future实例取消操作但是没有
提供可用的结果,你可以用格式Futrue<?>来申明实例,并且返回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类是一个实现了Runnable接口的Future实现类,所以可以直接用Executor执行。比如上面用submit提交的任务可以用下面的代码替代:
FutureTask<String> future =
new FutureTask<String>(new Callable<String>() {
public String call() {
return searcher.search(target);
}});
executor.execute(future);
//future.get()...
主要方法:
boolean cancel(boolean mayInterruptIfRunning):尝试中止关联任务的执行。如果关联任务已经结束、已经取消或者因为其他原因不能取消,则尝试中止会失败。如果成功,并且cancel调用的时候
关联任务还没有开始执行,则该任务将不再执行。如果任务已经开始,mayInterruptIfRunning参数指明了是否执行任务的线程在尝试停止时中断线程。
本方法返回后,随后调用的isDone()将一直返回true。如果本方法返回true,则isCancelled()将一直返回true。
参数:mayInterruptIfRunning - true 是否执行任务的线程中断;其他情况下,执行中的任务允许完成。
返回值:false 任务不能被中止,一般是因为它即将正常完成;其他情况下返回true
boolean isCancelled():如果任务在完成前就被中止则返回true
boolean isDone():如果任务完成则返回true。“完成”应该是正常结束(normal termination)、一个异常或者取消(中止cancellation),以上情况下都返回true。
V get() throws CancellationException,InterruptedException,ExecutionException:
V get(long timeout,TimeUnit unit)throws CancellationException,InterruptedException,ExecutionException,TimeoutException:
等待任务执行完成,并且获取返回结果(类型为V)
实现类:FutureTask<T>
该实现类是同时实现了Runnable和Future接口,用法如上面的例子。可以通过set方法为他设置任务执行完后的返回结果。
一个Future实例代表了一个异步操作(asynchronous computation)的结果。它的方法可以检查操作是否结束,是否在等待结束,检索操作的结果。操作结果只能用get方法来获得,该方法会一直
阻塞直到其准备好(获得结果)。cancel方法中止(取消)任务。附加的方法可以判断任务是正常结束或者被取消。一旦操作结束,操作就无法被取消。如果你想用一个Future实例取消操作但是没有
提供可用的结果,你可以用格式Futrue<?>来申明实例,并且返回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类是一个实现了Runnable接口的Future实现类,所以可以直接用Executor执行。比如上面用submit提交的任务可以用下面的代码替代:
FutureTask<String> future =
new FutureTask<String>(new Callable<String>() {
public String call() {
return searcher.search(target);
}});
executor.execute(future);
//future.get()...
主要方法:
boolean cancel(boolean mayInterruptIfRunning):尝试中止关联任务的执行。如果关联任务已经结束、已经取消或者因为其他原因不能取消,则尝试中止会失败。如果成功,并且cancel调用的时候
关联任务还没有开始执行,则该任务将不再执行。如果任务已经开始,mayInterruptIfRunning参数指明了是否执行任务的线程在尝试停止时中断线程。
本方法返回后,随后调用的isDone()将一直返回true。如果本方法返回true,则isCancelled()将一直返回true。
参数:mayInterruptIfRunning - true 是否执行任务的线程中断;其他情况下,执行中的任务允许完成。
返回值:false 任务不能被中止,一般是因为它即将正常完成;其他情况下返回true
boolean isCancelled():如果任务在完成前就被中止则返回true
boolean isDone():如果任务完成则返回true。“完成”应该是正常结束(normal termination)、一个异常或者取消(中止cancellation),以上情况下都返回true。
V get() throws CancellationException,InterruptedException,ExecutionException:
V get(long timeout,TimeUnit unit)throws CancellationException,InterruptedException,ExecutionException,TimeoutException:
等待任务执行完成,并且获取返回结果(类型为V)
实现类:FutureTask<T>
该实现类是同时实现了Runnable和Future接口,用法如上面的例子。可以通过set方法为他设置任务执行完后的返回结果。