Future是Java中表示异步计算结果的接口,通过ExecutorService.submit()提交任务后立即返回,支持查询状态(isDone/isCancelled)、获取结果(get/get超时)和取消任务(cancel),但不具备链式调用与回调能力,适合简单异步场景;复杂需求应选用CompletableFuture等增强方案。
Future接口是Java中获取异步任务执行结果的核心工具,它不负责启动线程或调度任务,而是作为“结果的占位符”——任务提交后立即返回一个Future对象,后续可通过它查询状态、获取结果或取消任务。
最常见的是通过ExecutorService.submit()提交Callable或Runnable任务,返回Future实例:
示例:
ExecutorService executor = Executors.newFixedThreadPool(2);Future.get()会一直等待直到任务完成,可能造成线程阻塞;更安全的做法是设置超时:
注意:get()只能调用一次,重复调用会再次等待(如果尚未完成)或直接返回结果(已完成),但不会报错。
在不阻塞的前提下,可随时检查任务进展:
例如:若任务内部未响应中断(如没检查Thread.interrupted()或没捕获In
terruptedException),cancel(true)可能无法真正停止它。
原生Future功能较基础:无法链式处理、不支持回调、不能组合多个异步任务。实际开发中建议:
Future本身不可变,也不可重复使用,每次submit都产生新实例——这是设计使然,不是缺陷。