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

Класс ExecutorService

Класс ExecutorService - это интерфейс из пакета java.util.concurrent, который предоставляет механизм для асинхронного выполнения задач в пуле потоков. Он позволяет отправлять задачи на выполнение, не заботясь о создании и управлении потоками вручную. Задачи могут быть представлены как объекты Runnable (не возвращают результат) или Callable (возвращают результат через Future). Экземпляр ExecutorService создается через фабричные методы класса Executors, например newFixedThreadPool или newCachedThreadPool. После завершения работы пул необходимо корректно остановить с помощью методов shutdown или shutdownNow.

Синтаксис

ExecutorService executor = Executors.newFixedThreadPool(n); executor.execute(runnableTask); Future<T> future = executor.submit(callableTask); executor.shutdown();

Пример

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

import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Main { public static void main(String[] args) { ExecutorService executor = Executors.newFixedThreadPool(2); for (int i = 1; i <= 4; i++) { final int taskId = i; executor.execute(() -> { System.out.println("Task " + taskId + " is running"); }); } executor.shutdown(); } }

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

"Task 1 is running" "Task 2 is running" "Task 3 is running" "Task 4 is running"

Пример

Давайте отправим задачу через метод submit и получим результат через объект Future:

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 { ExecutorService executor = Executors.newSingleThreadExecutor(); Future<Integer> future = executor.submit(() -> { return 42; }); Integer res = future.get(); System.out.println(res); executor.shutdown(); } }

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

42

Пример

Давайте создадим кэширующий пул потоков и выполним в нем задачу, возвращающую строку:

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 { ExecutorService executor = Executors.newCachedThreadPool(); Future<String> future = executor.submit(() -> { return "abcde".toUpperCase(); }); String res = future.get(); System.out.println(res); executor.shutdown(); } }

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

"ABCDE"

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

  • метод submit,
    который отправляет задачу и возвращает Future
  • метод execute,
    который выполняет задачу без возврата результата
  • метод shutdown,
    который завершает работу пула потоков
  • класс Executors,
    который создает экземпляры ExecutorService
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить