问题:Future接口是什么

问题

Future接口是什么

答案

Future接口

ExecutorService接口的submit()方法和invokeAll()方法返回一个Future对象或者Future对象的集合,从Future中可以获取到任务执行的结果或者获取到任务执行的状态(任务是运行中还是执行完成).

Future接口提供了一个可能阻塞的get()方法,返回Callable任务的返回值,如果是Runnable任务,将返回null.当任务还没有返回结果之前,调用get()方法将会导致方法被阻塞,直到任务返回结果.

Future 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();

你可能感兴趣的:(问题:Future接口是什么)