Найти тему
DEBAGanov

Java 1021. Какие стандартные инструменты Java вы бы использовали для реализации пула потоков?

Для реализации пула потоков в Java можно использовать Executor framework. Он предоставляет высокоуровневые классы Executor, ExecutorService, ThreadPoolExecutor, ScheduledExecutorService, которые облегчают работу с потоками и позволяют запускать асинхронные задачи. Здесь приведен пример, показывающий создание пула потоков с использованием ThreadPoolExecutor:

import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class ThreadPoolExample {
public static void main(String[] args) {
int corePoolSize = 5;
int maxPoolSize = 10;
long keepAliveTime = 5000;

ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(corePoolSize);

executor.setMaximumPoolSize(maxPoolSize);

executor.setKeepAliveTime(keepAliveTime, TimeUnit.MILLISECONDS);

executor.execute(new Task("Task 1"));
executor.execute(new Task("Task 2"));
executor.execute(new Task("Task 3"));

executor.shutdown();
}
}

class Task implements Runnable {
private String name;

public Task(String name) {
this.name = name;
}

@Override public void run() {
System.out.println(name + " is running. Thread id: " + Thread.currentThread().getId());
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

ThreadPoolExecutor создает пул потоков с фиксированной длиной, и все задачи, которые передаются в executor, выполняются в этих потоках. Он автоматически удаляет ненужные потоки, которые простаивают достаточно долго благодаря keepAliveTime. Количество потоков в пуле может быть настроено с помощью метода setMaximumPoolSize.

1606 вопрос-ответ по Java: https://github.com/DEBAGanov/interview_questions

Tелеграмм канал: https://t.me/DEBAGanov

Мое резюме: https://github.com/DEBAGanov