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类的使用详解
猜你喜欢
- 通过button将form表单的数据提交到action层的实例 2024-01-29
- 解决SpringBoot中的Scheduled单线程执行问题 2023-02-10
- Java类和成员变量声明类详解 2023-03-31
- Java中HashMap如何解决哈希冲突 2022-11-16
- eclipse启动一个Springboot项目 2023-03-31
- JAVA面试题之Forward与Redirect的区别详解 2024-01-28
- java – 如何在MySQL中的INT列中区分0和null 2023-11-03
- 用java实现扫雷游戏 2022-12-03
- SpringBoot整合Druid数据源的方法实现 2023-01-03
- Mybatisplus详解如何注入自定义的SQL 2023-01-24