Pool de Hilos con el Framework Executor

Hace unos meses publicamos un post sobre un Pool de Hilos hecho a medida y me quedó pendiente publicar el soporte que da Java para el Pool de Hilos.

Aprovechando el último post ahí va cómo se usa el ThreadPool de Java5:

Primero creo un Runnable:

public class MyRunnable implements Runnable {

private final long countUntil;

MyRunnable(long countUntil) {

this.countUntil = countUntil;

}

@Override

public void run() {

long sum = 0;

for (long i = 1; i < countUntil; i++) {

sum += i;

}

System.out.println(sum);

}

}

Y luego se lo asigno al Executor:

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

public class Main {

private static final int NTHREDS = 10;

public static void main(String[] args) {

ExecutorService executor = Executors.newFixedThreadPool(NTHREDS);

for (int i = 0; i < 500; i++) {

Runnable worker = new MyRunnable(10000000L + i);

executor.execute(worker);

}

//No se aceptan más hilos hasta que finalizan los que están en la cola

// and finish all existing threads in the queue

executor.shutdown();

// espero hasta que todos los hilos han finalizado

while (!executor.isTerminated()) {

}

System.out.println(«Finalizado todos los Hilos»);

}

}

Pues sí, algo superfluo usar las clases que pasaba en el otro post , pero es que uno está ya mayor 🙂

Respuestas

  1. Hola ¿Con esto puedo utilizar mas de 1 nucleo del procesador? Gracias

    1. Realmente es la propia JVM la que se encarga de esto, tanto usando este framework como hilos.

  2. Lo único que has hecho es traducir los comentarios de http://www.vogella.com/articles/JavaConcurrency/article.html
    Al menos podrías citar la fuente…

  3. Gracias por el post, muy bueno
    Una pregunta, como puedo saber, si todos los hilos están en estado de espera, es decir que ya terminaron su tarea y están a la espera de una nueva tarea

    1. Pregunto lo mismo que Ivan, y además, ¿se puede saber las tareas pendientes de ejecutar de cada hilo?

  4. Buenas, como puedo acceder a un especifico hilo de los que están en ejecución?, si quiero parar pausar o algo a uno de los hilos, como puedo hacerlo si ya está corriendo en el Executor?

Replica a kiko Cancelar la respuesta