Метод get
Метод get класса CompletableFuture блокирует текущий поток до тех пор, пока асинхронная задача не завершится, и возвращает её результат. Если задача завершилась с исключением, метод выбрасывает ExecutionException. Если текущий поток был прерван во время ожидания, выбрасывается InterruptedException. Без параметров метод ожидает результат бесконечно долго. В первом параметре можно передать максимальное время ожидания, а во второй - единицу измерения времени. Если за указанное время задача не завершится, будет выброшено TimeoutException.
Синтаксис
future.get()
future.get(timeout, unit)
Пример
Давайте создадим асинхронную задачу, которая возвращает строку, и получим её результат с помощью метода get:
import java.util.concurrent.CompletableFuture;
public class Main
{
public static void main(String[] args) throws Exception
{
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
return "abcde";
});
String res = future.get();
System.out.println(res);
}
}
Результат выполнения кода:
"abcde"
Пример
Давайте создадим асинхронную задачу, которая возвращает число, и получим его результат:
import java.util.concurrent.CompletableFuture;
public class Main
{
public static void main(String[] args) throws Exception
{
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {
return 12345;
});
Integer res = future.get();
System.out.println(res);
}
}
Результат выполнения кода:
12345
Пример
Давайте укажем максимальное время ожидания результата с помощью второго и третьего параметров:
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
public class Main
{
public static void main(String[] args) throws Exception
{
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
return "abcde";
});
String res = future.get(1, TimeUnit.SECONDS);
System.out.println(res);
}
}
Результат выполнения кода:
"abcde"
Пример
Давайте получим результат задачи, которая завершилась с исключением:
import java.util.concurrent.CompletableFuture;
public class Main
{
public static void main(String[] args) throws Exception
{
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
throw new RuntimeException("error");
});
try
{
String res = future.get();
System.out.println(res);
}
catch (Exception e)
{
System.out.println(e.getClass().getSimpleName());
}
}
}
Результат выполнения кода:
"ExecutionException"
Смотрите также
-
метод
join,
который ожидает завершения задачи без проверяемых исключений -
метод
whenComplete,
который выполняет действие после завершения задачи -
метод
exceptionally,
который обрабатывает исключения асинхронной задачи -
метод
isDone,
который проверяет, завершена ли задача