studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones java join multithreading scjp

java - para - manual de programacion android pdf



Comprender join() (6)

Supongamos que se está ejecutando un hilo A Tengo otro hilo, B , que no es. B ha sido iniciado, está en estado ejecutable.

¿Qué sucede si llamo: B.join() ?

¿Va a suspender la ejecución de A o esperará a que se complete el método run() de A?


Al llamar al método de unión en un subproceso, el subproceso de llamada espera a que se invoca el thread join () para finalizar. No afecta a ningún otro subproceso que no sea el llamante o el destinatario.

En su ejemplo, A solo esperaría a que B se completara si llama a B.join () de A. Si C llama a B.join (), la ejecución de A no se ve afectada.


Creo que si A es el hilo actual en ejecución. Una llamada a B.join() lo suspenderá hasta que se complete el método run() B. ¿Es esto correcto?


Cualquiera que sea el hilo que llame B.join () desde bloqueará y esperará a que B finalice.


De http://java.sun.com/docs/books/tutorial/essential/concurrency/join.html

El método de unión permite que un subproceso espere la finalización de otro. Si t es un objeto Thread cuyo hilo se está ejecutando actualmente,

t.join();

hace que el hilo actual pause la ejecución hasta que termina el hilo de t. Las sobrecargas de unión permiten al programador especificar un período de espera. Sin embargo, al igual que con la suspensión, la unión depende del sistema operativo para el tiempo, por lo que no debe suponer que la unión esperará exactamente el tiempo que especifique.

Recomiendo encarecidamente el Tutorial de Java como recurso de aprendizaje.


Join espera hasta que el hilo esté muerto. Si lo llamas en un hilo muerto, debería regresar inmediatamente. Aquí hay una demostración:

public class Foo extends Thread { /** * @param args */ public static void main(String[] args) { System.out.println("Start"); Foo foo = new Foo(); try { // uncomment the following line to start the foo thread. // foo.start(); foo.join(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Finish"); } public void run() { System.out.println("Foo.run()"); } }


join () hará que el subproceso que se está ejecutando espere a que el subproceso en el que se invocó muera.

Entonces, si A se está ejecutando, y usted llama a B.join (), A dejará de ejecutarse hasta que B finalice / muera.