ExecutorService (фреймворк пула потоков Java) –
В java всегда легко запустить метод или фрагмент кода асинхронно.
например –
В java поток может быть создан двумя способами: 1) Путем расширения класса Thread 2) Путем реализации Runnable Interface
Если мы хотим выполнить задачу асинхронно, мы можем создать новый экземпляр thread и назначить ему задачу. И запустите поток, он будет выполняться асинхронно.
Задача может выполняться асинхронно с использованием потоков. Но, если предположить, что мы хотим выполнить 100000 задач, то нам придется создать 100000 потоков. И каждый поток может выполнять по одной задаче за раз асинхронно. Но создание 100000 потоков для каждой задачи не является возможным решением.
Java ExecutorService – это интерфейс, который позволяет нам выполнять задачи в потоках асинхронно. Интерфейс Java ExecutorService присутствует в пакете java.util.concurrent. ExecutorService помогает поддерживать пул потоков и назначает им задачи. Он также предоставляет возможность ставить задачи в очередь до тех пор, пока не появится свободный поток, если количество задач превышает количество доступных потоков.
Используя службу Executor, мы можем создать пул потоков.
ExecutorService.newFixedThreadPool(10);
Здесь мы создаем пул из 10 потоков. И 100000 задач отправляются в службу исполнителя. Внутренне он назначает каждую задачу потокам, присутствующим в пуле потоков. Одновременно задачу могут выполнять не более 10 потоков. И задачи хранятся в очереди блокировки.
Почему Блокируется Очередь? – Потому что никакие два потока не могут получить доступ к очереди одновременно.
Как только выполнение потоков завершается, оно извлекает следующую задачу из blockingqueue. И впоследствии все потоки, присутствующие в пуле потоков, делают то же самое.
Оригинал: “https://dev.to/sonali_g_/executorservice-in-java-40bd”