РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1087 of 1163 menu

Метод cancel

Метод cancel класса Future пытается отменить выполнение задачи. В первый параметр мы передаем булево значение mayInterruptIfRunning: если передать true, то поток, выполняющий задачу, будет прерван, если передать false, то уже запущенной задаче будет позволено завершиться. Метод возвращает true, если задача была успешно отменена, и false, если отмена не удалась (например, задача уже завершена, уже отменена или отмена невозможна по каким-либо причинам). После успешной отмены метод get будет выбрасывать CancellationException.

Синтаксис

boolean cancel(boolean mayInterruptIfRunning)

Пример

Давайте создадим задачу, которая выполняется достаточно долго, а затем попробуем её отменить:

import java.util.concurrent.*; public class Main { public static void main(String[] args) { CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> { try { Thread.sleep(5000); } catch (InterruptedException e) { return "interrupted"; } return "abcde"; }); boolean res = future.cancel(true); System.out.println(res); System.out.println(future.isCancelled()); } }

Результат выполнения кода:

true true

Пример

Давайте попробуем отменить задачу, которая уже завершилась. В этом случае метод cancel вернет false:

import java.util.concurrent.*; public class Main { public static void main(String[] args) { CompletableFuture<String> future = CompletableFuture.completedFuture("abcde"); boolean res = future.cancel(true); System.out.println(res); System.out.println(future.isCancelled()); } }

Результат выполнения кода:

false false

Пример

Давайте отменим задачу и попробуем получить её результат через метод get. Это приведет к исключению CancellationException:

import java.util.concurrent.*; public class Main { public static void main(String[] args) { CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> { try { Thread.sleep(5000); } catch (InterruptedException e) { return "interrupted"; } return "abcde"; }); future.cancel(true); try { future.get(); } catch (CancellationException e) { System.out.println("task was cancelled"); } catch (InterruptedException | ExecutionException e) { System.out.println("error"); } } }

Результат выполнения кода:

"task was cancelled"

Смотрите также

  • класс CompletableFuture,
    который представляет асинхронную задачу
  • метод complete,
    который завершает задачу значением
  • метод completeExceptionally,
    который завершает задачу исключением
  • метод isCancelled,
    который проверяет, была ли задача отменена
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить