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

Метод newVirtualThreadPerTaskExecutor

Метод newVirtualThreadPerTaskExecutor класса Executors создает и возвращает объект ExecutorService, который для каждой переданной задачи создает отдельную виртуальную нить. Виртуальные нити - это легковесные нити, появившиеся в Java 21, которые позволяют запускать миллионы задач параллельно без выделения большого количества системных ресурсов. Метод не принимает параметров и не требует настройки пула: каждая задача получает собственную виртуальную нить, которая уничтожается после завершения задачи. Такой подход удобен для задач, связанных с ожиданием ввода-вывода, например сетевых запросов или чтения файлов.

Синтаксис

Executors.newVirtualThreadPerTaskExecutor()

Пример

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

import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Main { public static void main(String[] args) throws InterruptedException { ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor(); for (int i = 1; i <= 3; i++) { int taskId = i; executor.submit(() -> { System.out.println("Task " + taskId + " in " + Thread.currentThread()); }); } executor.shutdown(); } }

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

"Task 1 in VirtualThread[#21]/runnable@ForkJoinPool-1-worker-1" "Task 2 in VirtualThread[#22]/runnable@ForkJoinPool-1-worker-2" "Task 3 in VirtualThread[#23]/runnable@ForkJoinPool-1-worker-3"

Пример

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

import java.util.ArrayList; import java.util.List; 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.newVirtualThreadPerTaskExecutor(); List<Future<String>> futures = new ArrayList<>(); for (int i = 1; i <= 5; i++) { int value = i; futures.add(executor.submit(() -> "Result " + value)); } List<String> res = new ArrayList<>(); for (Future<String> future : futures) { res.add(future.get()); } System.out.println(res); executor.shutdown(); } }

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

[Result 1, Result 2, Result 3, Result 4, Result 5]

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

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