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

Метод newScheduledThreadPool

Метод newScheduledThreadPool класса Executors создает пул потоков, который умеет выполнять задачи по расписанию или с задержкой. В первом параметре мы передаем количество потоков, которые будут постоянно находиться в пуле. Второй параметр необязательный и задает фабрику потоков. Метод возвращает объект типа ScheduledExecutorService, который умеет запускать задачи через заданный интервал времени.

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

Синтаксис

Executors.newScheduledThreadPool(corePoolSize, [threadFactory])

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

Пример

Давайте создадим пул из 2 потоков и выполним задачу с задержкой в 1 секунду:

import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class Main { public static void main(String[] args) { ScheduledExecutorService executor = Executors.newScheduledThreadPool(2); executor.schedule(() -> { System.out.println("Task executed"); }, 1, TimeUnit.SECONDS); executor.shutdown(); } }

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

"Task executed"

Пример

Давайте создадим пул из 1 потока и запустим задачу периодически каждые 2 секунды:

import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class Main { public static void main(String[] args) { ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); executor.scheduleAtFixedRate(() -> { System.out.println("Tick"); }, 0, 2, TimeUnit.SECONDS); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } executor.shutdownNow(); } }

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

"Tick" "Tick" "Tick"

Пример

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

import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class Main { public static void main(String[] args) { ScheduledExecutorService executor = Executors.newScheduledThreadPool(3); executor.schedule(() -> { System.out.println("First"); }, 1, TimeUnit.SECONDS); executor.schedule(() -> { System.out.println("Second"); }, 2, TimeUnit.SECONDS); executor.schedule(() -> { System.out.println("Third"); }, 3, TimeUnit.SECONDS); try { Thread.sleep(4000); } catch (InterruptedException e) { e.printStackTrace(); } executor.shutdown(); } }

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

"First" "Second" "Third"

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

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