Для реализации пула потоков в 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