java android multithreading loops

¿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.