Un Thread pool en Java administra una colección de workers y threads ejecutables.
1.- Creando el hilo trabajador(worker)
El primer paso es crear un hilo, en este ejemplo se creará un hilo trabajador que recibirá 3 parámetros un arreglo, un indice de inicio y un indice de fin e imprimirá los valores del arreglo que se encuentren en el rango.
/** * */ package com.raidentrance.threads; /** * @author raidentrance * */ public class PrintArrayThread implements Runnable { private int[] array; private int start; private int end; public PrintArrayThread(int[] array, int start, int end) { this.array = array; this.start = start; this.end = end; } public void run() { for (int i = start; i < end; i++) { System.out.println( String.format("Current thread %s printing value %s", Thread.currentThread().getName(), array[i])); } } }
2.-Creando el Thread Pool
Una vez creado el worker los siguientes pasos serán los siguientes:
- Crear e inicializar el arreglo base que se pasará como parámetro a los hilos
- Crear el ThreadPool y especificar el número de hilos que se utilizaran, para este ejemplo se utilizarán 3 hilos
- Ejecutar los hilos que realizarán el trabajo
- Detener el Thread pool
- Esperar a que todos los hilos terminen su ejecución
/** * */ package com.raidentrance.threads; import java.util.Random; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * @author raidentrance * */ public class ThreadPoolExample { public static void main(String[] args) { int bigArray[] = new int[100000]; for (int i = 0; i < bigArray.length; i++) { bigArray[i] = new Random().nextInt(100); } ExecutorService executor = Executors.newFixedThreadPool(3); for (int i = 0; i < 10; i++) { Runnable worker = new PrintArrayThread(bigArray, i, i + 10); executor.execute(worker); } executor.shutdown(); while (!executor.isTerminated()) { } System.out.println("Finished all threads"); } }
3.- Salida
Una vez que se ejecute el programa se mostrará la siguiente salida:
Current thread pool-1-thread-2 printing value 80 Current thread pool-1-thread-3 printing value 62 Current thread pool-1-thread-2 printing value 62 Current thread pool-1-thread-1 printing value 62 Current thread pool-1-thread-3 printing value 95 Current thread pool-1-thread-2 printing value 95
Como se puede observar existe solo un thread pool que contiene 3 diferentes hilos que imprimen al mismo tiempo los valores correspondientes del arreglo.
Si quieres aprender más sobre hilos recomendamos los siguientes libros:
Autor: Alejandro Agapito Bautista
Twitter: @raidentrance
Contacto:raidentrance@gmail.com