Метод isCancelled
Метод isCancelled класса Future возвращает true,
если задача была отменена до того, как она завершилась обычным способом.
Во всех остальных случаях метод возвращает false.
Метод не принимает параметров и не выбрасывает проверяемых исключений.
Отмена задачи выполняется с помощью метода cancel.
Если задача уже успела завершиться, была отменена или по какой-то
причине не может быть отменена, метод cancel вернёт false,
а isCancelled в таком случае тоже вернёт false.
Важно понимать: isCancelled проверяет именно факт отмены,
а не факт завершения задачи. Для проверки завершения (любым способом)
используется метод isDone.
Синтаксис
boolean isCancelled()
Пример
Давайте создадим задачу через CompletableFuture,
отменим её и проверим результат методом isCancelled:
import java.util.concurrent.CompletableFuture;
public class Main
{
public static void main(String[] args)
{
CompletableFuture<String> future = new CompletableFuture<>();
boolean cancelledBefore = future.isCancelled();
future.cancel(true);
boolean cancelledAfter = future.isCancelled();
System.out.println(cancelledBefore);
System.out.println(cancelledAfter);
}
}
Результат выполнения кода:
false
true
Пример
Давайте проверим, что для уже завершённой задачи метод
isCancelled вернёт false, даже если после
завершения вызвать cancel:
import java.util.concurrent.CompletableFuture;
public class Main
{
public static void main(String[] args)
{
CompletableFuture<String> future = CompletableFuture.completedFuture("abcde");
boolean cancelled = future.isCancelled();
boolean cancelResult = future.cancel(true);
System.out.println(cancelled);
System.out.println(cancelResult);
}
}
Результат выполнения кода:
false
false
Пример
Давайте отменим асинхронную задачу, созданную через
supplyAsync, и проверим её состояние:
import java.util.concurrent.CompletableFuture;
public class Main
{
public static void main(String[] args)
{
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
try
{
Thread.sleep(5000);
}
catch (InterruptedException e)
{
Thread.currentThread().interrupt();
}
return "abcde";
});
future.cancel(true);
System.out.println(future.isCancelled());
System.out.println(future.isDone());
}
}
Результат выполнения кода:
true
true
Смотрите также
-
класс
CompletableFuture,
который представляет асинхронную задачу -
метод
cancel,
который отменяет выполнение задачи -
метод
isDone,
который проверяет завершение задачи -
метод
get,
который ожидает результат выполнения задачи