Как запустить несколько потоков одновременно в Java? Подход ExecutorService

Опубликовано: 2021-10-09
Как запустить несколько потоков одновременно в Java? Подход ExecutorService

Давайте еще раз взглянем на этот пример: как получить статус Ping для любой конечной точки HTTP в Java?

Вы заметили выполнение потока для этого примера? Это последовательно. What if you have 500 endpoints? Бьюсь об заклад, вам придется подождать не менее 5 минут, чтобы получить результат. Что, я уверен, не лучшее решение.

Что теперь? Правильным будет вопрос:

  • Как запустить несколько потоков одновременно?
  • Как реализовать несколько потоков в Java?
  • Как запустить разные потоки в Java?
  • Java — Где учебник по многопоточному программированию?
  • Тема: Как использовать несколько потоков для ускорения обработки?

ExecutorService Approach — ваш ответ.

Executor, который предоставляет методы для управления завершением и методы, которые могут создавать Future для отслеживания хода выполнения одной или нескольких асинхронных задач.

Службу ExecutorService можно закрыть, что приведет к отклонению новых задач. Для закрытия ExecutorService предусмотрено два разных метода. Метод shutdown() позволит выполнить ранее отправленные задачи перед завершением, в то время как метод shutdownNow() предотвращает запуск ожидающих задач и пытается остановить выполнение текущих задач.

После завершения у исполнителя нет активно выполняемых задач, нет задач, ожидающих выполнения, и никакие новые задачи не могут быть отправлены. Неиспользуемый ExecutorService следует закрыть, чтобы можно было восстановить его ресурсы.

Метод submit расширяет базовый метод Executor.execute ( java.lang.Runnable ), создавая и возвращая Future, который можно использовать для отмены выполнения и/или ожидания завершения. Методы invokeAny и invokeAll выполняют наиболее часто используемые формы массового выполнения, выполняя набор задач, а затем ожидая завершения по крайней мере одной или всех задач. (Класс ExecutorCompletionService можно использовать для написания настраиваемых вариантов этих методов.)

Класс Executors предоставляет фабричные методы для служб-исполнителей, предоставляемых в этом пакете.

  • java — ExecutorService, как дождаться завершения всех задач?
  • Руководство по Java ExecutorService
  • Пул потоков Java — объяснение ExecutorService

Ниже приведен простой пример Java, который объясняет usage of ExecutorService .

Выход:

Теперь проверьте результат.

Это должно быть всего за несколько секунд. Я надеюсь, что вы найдете это полезным. Попробуйте запустить это более одного раза, и вы можете увидеть другой результат, поскольку все потоки выполняются параллельно, и кто когда-либо получит быстрый результат, вы увидите результат, опубликованный в консоли Eclipse.

Дайте мне знать по любому запросу.