¿Cómo esperar a que un hilo termine antes de que comience otro hilo en Java/Android?
multithreading loops (3)
Antes de responder a su pregunta, le recomiendo encarecidamente que consulte ExecutorServices
como, por ejemplo, ThreadPoolExecutor
.
Ahora para responder a tu pregunta:
Si desea esperar a que finalice el hilo anterior, antes de comenzar el siguiente, agregue thread.join()
entre:
for(int i = 0; i < 10; i++) {
thread = new Thread(this);
thread.start();
thread.join(); // Wait for it to finish.
}
Si quieres lanzar 10 hilos, déjalos hacer su trabajo y luego continúa, join
a ellos después del bucle:
Thread[] threads = new Thread[10];
for(int i = 0; i < threads.length; i++) {
threads[i] = new Thread(this);
threads[i].start();
}
// Wait for all of the threads to finish.
for (Thread thread : threads)
thread.join();
Digamos que tengo este código muy simple:
for(int i = 0; i < 10; i++) {
thread = new Thread(this);
thread.start();
}
Sin embargo, en este código, el subproceso aparentemente se inicia 10 veces a la vez y no espera hasta que finalice el anterior. ¿Cómo verifica si el hilo está terminado antes de dejar que el hilo comience nuevamente?
Si cada subproceso debe esperar a que termine el anterior antes de comenzar, es mejor que tenga un subproceso único que ejecute el método de ejecución original 10 veces en secuencia:
Runnable r = new Runnable() {
public void run() {
for (int i = 0; i < 10; i++) {
OuterClass.this.run();
}
}
}
new Thread(r).start();
Solo para elaborar la sugerencia de aioobe:
Antes de responder a su pregunta, le recomiendo encarecidamente que consulte ExecutorServices como, por ejemplo, ThreadPoolExecutor.
Hay un ExecutorService
particular que puede usarse para esta tarea:
ExecutorService pool = Executors.newSingleThreadExecutor();
for (int i=0; i<10; i++) {
pool.submit(this); //assuming this is a Runnable
}
pool.shutdown(); //no more tasks can be submitted, running tasks are not interrupted
newSingleThreadExecutor()
es similar a llamar a newFixedThreadPool(1)
pero asegura que el servicio no se puede reconfigurar para usar más de un hilo.