Метод newFixedThreadPool
Метод newFixedThreadPool класса Executors создает
пул потоков с фиксированным количеством потоков. В первом параметре
мы передаем количество потоков в пуле. Задачи помещаются в
очередь и выполняются по мере освобождения потоков. Если все
потоки заняты, новые задачи ожидают в очереди. Потоки в таком
пуле переиспользуются и не завершаются после выполнения задачи.
Синтаксис
Executors.newFixedThreadPool(int nThreads)
Пример
Давайте создадим пул из 2 потоков и отправим в него
3 задачи:
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 <= 3; i++) {
int taskId = i;
executor.execute(() -> {
System.out.println("Task " + taskId + " started");
});
}
executor.shutdown();
}
}
Результат выполнения кода:
"Task 1 started"
"Task 2 started"
"Task 3 started"
Пример
Давайте получим результат выполнения задач через 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.newFixedThreadPool(2);
Future<Integer> future = executor.submit(() -> {
return 2 + 3;
});
int res = future.get();
System.out.println(res);
executor.shutdown();
}
}
Результат выполнения кода:
5
Смотрите также
-
класс
Executors,
который содержит фабричные методы для создания пулов -
метод
newCachedThreadPool,
который создает пул с кэшированными потоками -
метод
newSingleThreadExecutor,
который создает пул с одним потоком -
метод
shutdown,
который завершает работу пула потоков