Java中的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);
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();
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类的使用详解。