Future和FutureTask的区别
Future接口
Future是Java异步计算结果的抽象,表示异步任务的执行结果。
1 2 3 4 5 6 7
| public interface Future<V> { V get() throws InterruptedException, ExecutionException; V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException; boolean cancel(boolean mayInterruptIfRunning); boolean isCancelled(); boolean isDone(); }
|
FutureTask
FutureTask是Future的实现类,同时实现了Runnable接口。
1 2
| public class FutureTask<V> implements RunnableFuture<V> {} public interface RunnableFuture<V> extends Runnable, Future<V> {}
|
使用区别
1 2 3 4 5 6 7 8 9
| ExecutorService executor = Executors.newSingleThreadExecutor(); Future<String> future = executor.submit(() -> "result"); String result = future.get();
FutureTask<String> task = new FutureTask<>(() -> "result"); new Thread(task).start(); String result = task.get();
|
适用场景
- Future:提交给线程池,返回Future
- FutureTask:可作为Runnable直接在线程中执行
总结
FutureTask更灵活,可单独运行;Future配合线程池使用更方便。