问题:Future接口是什么

问题

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();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。