JAVA Future类的使用详解

Java中的Future类用于描述一个异步计算的结果,它提供了检查计算是否完成、等待计算完成和获取计算结果的方法。

JAVA Future类的使用详解

什么是Future类?

Java中的Future类用于描述一个异步计算的结果,它提供了检查计算是否完成、等待计算完成和获取计算结果的方法。

Future类的使用方法

创建Future对象

可以使用java.util.concurrent.Executors类中的线程池工厂方法创建一个ExecutorService线程池,然后将Callable或Runnable任务提交给线程池,线程池会返回一个Future类型的对象,表示异步任务的结果。

ExecutorService executor = Executors.newFixedThreadPool(2);
Future<String> futureResult = executor.submit(() -> {
    Thread.sleep(1000);
    return "Hello, Future!";
});

获取异步计算结果

可以使用get()方法获取异步计算的结果,如果计算未完成则方法会阻塞,直到计算完成返回结果或者抛出异常。

String result = futureResult.get();

检查计算是否完成

可以使用isDone()方法检查异步计算是否完成,该方法立即返回计算是否完成的布尔值,不会阻塞。

if (futureResult.isDone()) {
    String result = futureResult.get();
}

取消异步任务

可以使用cancel()方法取消异步任务,方法接收一个布尔值参数,表示是否中断正在执行的任务,如果任务已经完成或者被取消,则方法将返回false,否则会返回true。

boolean cancelResult = futureResult.cancel(false);

Future类的示例说明

示例1:使用Future获取线程池中所有任务的计算结果

ExecutorService executor = Executors.newFixedThreadPool(2);
List<Future<String>> futureResults = new ArrayList<>();
futureResults.add(executor.submit(() -> "Task1"));
futureResults.add(executor.submit(() -> "Task2"));
futureResults.add(executor.submit(() -> "Task3"));

for (Future<String> futureResult : futureResults) {
    String result = futureResult.get();
    System.out.println(result);
}

executor.shutdown();

示例2:使用Future取消异步任务

ExecutorService executor = Executors.newFixedThreadPool(2);
Future<String> futureResult = executor.submit(() -> {
    Thread.sleep(10000);
    return "Hello, Future!";
});

// 在任务执行5秒钟后取消任务
Thread.sleep(5000);
boolean cancelResult = futureResult.cancel(true);
System.out.println("Cancel Result: " + cancelResult);

executor.shutdown();

以上就是JAVA Future类的使用详解。

本文标题为:JAVA Future类的使用详解

基础教程推荐