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类的使用详解
基础教程推荐
猜你喜欢
- 一文搞懂Spring Bean中的作用域和生命周期 2022-12-27
- mybatis中的if test判断入参的值问题 2022-12-03
- Java类加载器ClassLoader源码层面分析讲解 2023-06-02
- swagger配置正式环境中不可访问的问题 2023-01-02
- java8使用filter()取出自己所需数据 2024-03-02
- Java文件与IO流操作原理详细分析 2023-06-01
- JSP 导出Excel表格的实例 2023-08-01
- Spring Security实现自定义访问策略 2022-10-24
- Spring Bean注册与注入实现方法详解 2023-06-23
- JSP 中Spring的Resource类读写中文Properties实例代码 2023-08-01