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

Значение из фоновой задачи в Java

Запрос к базе может занять сотни миллисекунд. Вынести чтение в фон и вернуть число или строку в основной код удобнее, чем передавать результат через общий массив и следить за гонками вручную.

Callable<V> похож на Runnable, но метод call() возвращает значение типа V и может бросать проверяемые исключения. Пул принимает такую задачу через submit и отдаёт Future<V>:

import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; public class Main { static int sumSquares(int limit) throws Exception { ExecutorService pool = Executors.newFixedThreadPool(1); try { Callable<Integer> work = () -> { int total = 0; for (int i = 1; i <= limit; i++) { total += i * i; } return total; }; Future<Integer> future = pool.submit(work); return future.get(); } finally { pool.shutdown(); } } public static void main(String[] args) throws Exception { System.out.println(sumSquares(4)); } }

Для предела 4 на экране 30: сумма 1 + 4 + 9 + 16. Тип Future<Integer> совпадает с типом, который возвращает call(), поэтому get() без приведения даёт Integer.

Если задача не возвращает смыслового значения, достаточно Runnable и Future<?>: get() лишь подтверждает завершение. Когда нужен осмысленный ответ, Callable делает контракт явным уже в сигнатуре.

Поставьте в пул Callable, который возвращает длину строки "supreme". Выведите результат get() в main.

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