Crea un Thread Pool en Java


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

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s