Mi pregunta: ¿Cómo ejecutar un grupo de objetos con hebras en un ThreadPoolExecutor
y esperar a que todos terminen antes de continuar?Cómo esperar a que un ThreadPoolExecutor termine
Soy nuevo en ThreadPoolExecutor. Este código es una prueba para saber cómo funciona. En este momento ni siquiera llene el BlockingQueue
con los objetos porque no entiendo cómo iniciar la cola sin llamar a execute()
con otro RunnableObject
. De todos modos, ahora solo llamo al awaitTermination()
pero creo que aún me falta algo. ¡Cualquier tip estaría genial! Gracias.
public void testThreadPoolExecutor() throws InterruptedException {
int limit = 20;
BlockingQueue q = new ArrayBlockingQueue(limit);
ThreadPoolExecutor ex = new ThreadPoolExecutor(limit, limit, 20, TimeUnit.SECONDS, q);
for (int i = 0; i < limit; i++) {
ex.execute(new RunnableObject(i + 1));
}
ex.awaitTermination(2, TimeUnit.SECONDS);
System.out.println("finished");
}
La clase RunnableObject:
package playground;
public class RunnableObject implements Runnable {
private final int id;
public RunnableObject(int id) {
this.id = id;
}
@Override
public void run() {
System.out.println("ID: " + id + " started");
try {
Thread.sleep(2354);
} catch (InterruptedException ignore) {
}
System.out.println("ID: " + id + " ended");
}
}
no creo que es una buena idea para responder a su pregunta inmediatamente después de que lo puesto y sugieren que su propia respuesta no es del todo adecuada. En el mejor de los casos, eso garantiza y actualiza su pregunta original explicando por qué esa respuesta no es suficiente. – Kiril
@Link, tienes razón. Lo arreglaré. – kentcdodds
Acabo de editar mi respuesta para mostrar una forma de esperar a que terminen todos los trabajos antes de cerrar el ejecutor. – Gray