Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗jvSpExFu 173 of 322 menu
◀ ▶

Контроль выполнения задачи в Java

Пока отчёт считается в фоне, интерфейс может показывать индикатор. Программе нужен объект, который отвечает на вопрос «уже готово?» и при необходимости терпеливо ждёт окончания без опроса потока в цикле.

Future из java.util.concurrent появляется после submit. Метод isDone() возвращает true, когда задача завершилась штатно или с ошибкой. Метод get() блокирует текущий поток, пока результат не станет доступен:

import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; public class Main { public static void main(String[] args) throws Exception { ExecutorService pool = Executors.newFixedThreadPool(1); Future<String> job = pool.submit(() -> { Thread.sleep(200); return "ready"; }); System.out.println(job.isDone()); String text = job.get(3, TimeUnit.SECONDS); System.out.println(text); System.out.println(job.isDone()); pool.shutdown(); } }

Первая печать false, затем строка ready и снова true. Перегрузка get(timeout, unit) не ждёт бесконечно: при превышении времени бросается TimeoutException.

cancel(mayInterrupt) просит остановить задачу, если она ещё не завершилась. Отмена не гарантирует мгновенный эффект для тяжёлой работы, но даёт способ отказаться от ненужного результата при уходе пользователя со страницы.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить