Пул потоков - это пул уже созданного рабочего потока, готового выполнить задание. Он создает Thread
и управляет ими. Вместо того чтобы создавать поток и отбрасывать его после выполнения задачи, пул потоков повторно использует потоки в форме рабочего потока.
Почему?
Поскольку создание Thread занимает много времени и задерживает обработку запроса. Он также ограничивает количество клиентов в зависимости от того, сколько потоков на JVM разрешено, что, очевидно, является ограниченным числом.
Создание пула потоков фиксированного размера с использованием среды Executor -
Java 5 представила полнофункциональный встроенный фреймворк Thread Pool, широко известный как Executor framework .
Создание пула потоков фиксированного размера с использованием инфраструктуры Java 5 Executor
довольно легко из-за статических фабричных методов, предоставляемых классом Executors
. Все, что вам нужно сделать, это определить свою задачу, которую вы хотите выполнить одновременно, и затем отправить эту задачу в ExecutorService
.
Отсюда пул потоков позаботится о том, как выполнить эту задачу; он может быть выполнен любым свободным рабочим потоком.
public class ThreadPoolExample {
public static void main(String args[]) {
ExecutorService service = Executors.newFixedThreadPool(10); //create 10 worker threads in Thread Pool
for (int i =0; i<100; i++){
service.submit(new Task(i)); //submit that to be done
}
}
}
final class Task implements Runnable {
private int taskId;
public Task(int id){
this.taskId = id;
}
@Override
public void run() {
System.out.println("Task ID : " + this.taskId +" performed by "
+ Thread.currentThread().getName());
}
}
Output:
Task ID : 0 performed by pool-1-thread-1
Task ID : 3 performed by pool-1-thread-4
Task ID : 2 performed by pool-1-thread-3
Task ID : 1 performed by pool-1-thread-2
Task ID : 5 performed by pool-1-thread-6
Task ID : 4 performed by pool-1-thread-5
*Output may vary from system to system