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

Метод call

Метод call принадлежит интерфейсу Callable и представляет собой задачу, которая может быть выполнена в отдельном потоке и вернуть результат. В отличие от метода run интерфейса Runnable, метод call возвращает значение и может пробрасывать проверяемые исключения. Параметров метод не принимает. Результат выполнения задачи возвращается через объект Future, который получается при отправке задачи в ExecutorService.

Синтаксис

V call() throws Exception

Пример

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

import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; public class Main { public static void main(String[] args) throws Exception { Callable<Integer> task = () -> { return 2 + 3; }; ExecutorService executor = Executors.newSingleThreadExecutor(); Future<Integer> future = executor.submit(task); Integer res = future.get(); System.out.println(res); executor.shutdown(); } }

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

5

Пример

Давайте создадим задачу, которая возвращает строку, и выведем её на экран:

import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; public class Main { public static void main(String[] args) throws Exception { Callable<String> task = () -> { return "abcde"; }; ExecutorService executor = Executors.newSingleThreadExecutor(); Future<String> future = executor.submit(task); String res = future.get(); System.out.println(res); executor.shutdown(); } }

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

"abcde"

Пример

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

import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; public class Main { public static void main(String[] args) throws Exception { Callable<Integer> task = () -> { throw new RuntimeException("error"); }; ExecutorService executor = Executors.newSingleThreadExecutor(); Future<Integer> future = executor.submit(task); try { Integer res = future.get(); System.out.println(res); } catch (Exception e) { System.out.println("Exception caught"); } executor.shutdown(); } }

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

"Exception caught"

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

  • интерфейс Callable,
    который представляет задачу с возвращаемым результатом
  • интерфейс Runnable,
    который представляет задачу без возвращаемого результата
  • метод run,
    который выполняет задачу без возврата результата
  • класс Thread,
    который представляет поток выполнения
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить