Интерфейс Future
Интерфейс Future представляет результат
асинхронного вычисления. Он позволяет проверить,
завершено ли вычисление, дождаться его завершения
и получить результат. Объект Future обычно
возвращается методами вроде submit у
ExecutorService или является частью
CompletableFuture. Метод get без
параметров блокирует поток до получения результата,
а с параметрами принимает время ожидания и единицу
измерения. Метод cancel пытается отменить
задачу, принимая флаг о возможности прерывания.
Синтаксис
V get()
V get(long timeout, TimeUnit unit)
boolean cancel(boolean mayInterruptIfRunning)
boolean isDone()
boolean isCancelled()
Пример
Давайте создадим асинхронную задачу через
CompletableFuture и получим её результат
с помощью метода get:
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Future;
public class Main
{
public static void main(String[] args) throws Exception
{
Future<String> future = CompletableFuture.supplyAsync(() -> {
return "abcde";
});
String res = future.get();
System.out.println(res);
}
}
Результат выполнения кода:
"abcde"
Пример
Давайте проверим, завершена ли задача, с помощью
метода isDone:
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Future;
public class Main
{
public static void main(String[] args) throws Exception
{
Future<Integer> future = CompletableFuture.supplyAsync(() -> {
return 12345;
});
boolean res = future.isDone();
System.out.println(res);
future.get();
System.out.println(future.isDone());
}
}
Результат выполнения кода:
false
true
Пример
Давайте отменим задачу с помощью метода
cancel и проверим её состояние через
isCancelled:
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Future;
public class Main
{
public static void main(String[] args) throws Exception
{
Future<String> future = CompletableFuture.supplyAsync(() -> {
return "abcde";
});
boolean res = future.cancel(true);
System.out.println(res);
System.out.println(future.isCancelled());
}
}
Результат выполнения кода:
true
true
Смотрите также
-
класс
CompletableFuture,
который расширяет возможности Future -
метод
supplyAsync,
который асинхронно возвращает результат -
метод
runAsync,
который асинхронно выполняет задачу -
метод
join,
который ожидает завершения без исключений