En mi programa, estoy creando varios hilos en el método main(). La última línea en el método principal es una llamada a System.out.println(), que no deseo llamar hasta que todos los hilos hayan desaparecido. He intentado llamar a Thread.join() en cada hilo, sin embargo, que bloquea cada hilo para que se ejecuten secuencialmente en lugar de en paralelo.¿Cómo pongo en pausa main() hasta que todos los demás hilos han muerto?
¿Hay alguna manera de bloquear el hilo principal() hasta que todos los otros hilos hayan terminado de ejecutarse? Aquí está la parte relevante de mi código:
public static void main(String[] args) {
//some other initialization code
//Make array of Thread objects
Thread[] racecars = new Thread[numberOfRaceCars];
//Fill array with RaceCar objects
for(int i=0; i<numberOfRaceCars; i++) {
racecars[i] = new RaceCar(laps, args[i]);
}
//Call start() on each Thread
for(int i=0; i<numberOfRaceCars; i++) {
racecars[i].start();
try {
racecars[i].join(); //This is where I tried to using join()
//It just blocks all other threads until the current
//thread finishes.
} catch(InterruptedException e) {
e.printStackTrace();
}
}
//This is the line I want to execute after all other Threads have finished
System.out.println("It's Over!");
}
Gracias por la ayuda chicos!
Eric
¡Agradable, eso funcionó maravillosamente! ¡Gracias! – ericso
Este es obviamente el camino correcto a seguir. No puedo creer que las otras respuestas que abogan por el uso de wait() y notify() y las barreras se hayan subido de categoría: son demasiado complicadas para esta situación. –
@AdrianPronk: Esa es la belleza de las diferentes opiniones. – Thomas