问题
Future接口是什么
答案
Future接口
ExecutorService接口的submit()方法和invokeAll()方法返回一个Future对象或者Future对象的集合,从Future中可以获取到任务执行的结果或者获取到任务执行的状态(任务是运行中还是执行完成).
Future接口提供了一个可能阻塞的get()方法,返回Callable任务的返回值,如果是Runnable任务,将返回null.当任务还没有返回结果之前,调用get()方法将会导致方法被阻塞,直到任务返回结果.
Future<String> future = executorService.submit(callableTask);
String result = null;
try {
result = future.get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
get()方法的长时间阻塞会导致一个应用的性能下降,如果任务的返回值并不重要,可以通过调用带timeout的方法来避免这种问题.
String result = future.get(200, TimeUnit.MILLISECONDS);
如果执行的时间比指定的时间来的长,将会抛出一个TimeoutException异常,但任务还会继续执行,只是取消获取任务返回值的获取.
使用isDone()方法可以检查任务是否已经执行完成.
使用cancel()方法可以取消任务的执行(可能在执行途中被取消).使用isCancelled()方法可以检查任务是否被取消.
boolean canceled = future.cancel(true);
boolean isCancelled = future.isCancelled();