¿Está usando una combinación para esperar hasta que un subproceso haya terminado lo mismo que usar un observador para notificar a la clase de subproceso de llamada cuando el subproceso ha finalizado?¿Está usando el patrón de observador como un notificador lo mismo que usar Thread.join?
Using join -
public class Reader {
Thread t = new Thread(new ReadContent());
t.start();
t.join();
System.out.println("Thread has finished");
public class ReadContent() implements Runnable{
}
public void run() {
readContentURL();
}
}
/*****************************************************************************/
Using observer -
public interface ReadContentListener{
public void contentRead();
}
public class Reader implements ReadContentListener {
Thread t = new Thread(new ReadContent(this));
t.start();
pubic void contentRead(){
System.out.println("Thread has finished");
}
public class ReadContent implements Runnable{
public ReadContent(ReadContentListener readContentListener) {
this.readContentListener = readContentListener;
}
public void run() {
readContentURL();
this.readContentListener.contentRead();
}
}
/*************************************************************/
public GenericScreenAnimation(String nextScreen, Thread genericWorkerThread)
{
this.genericWorkerThread = genericWorkerThread;
this.genericWorkerThread.start();
initialise();
try {
this.genericWorkerThread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
ScreenController.displayNextScreen(nextScreen);
}
No veo nada de malo con el uso de join. Cuando se usa correctamente, puede ser absolutamente apropiado. Ahora bien, si una persona simplemente transfiere un hilo ejecutable a un hilo, inicia el hilo y se une inmediatamente a él, entonces sí, eso es incorrecto. –
@John V - tienes toda la razón. No quise decir que usar join() en general es incorrecto. He editado mi respuesta para ser un poco más claro. –
He agregado un código más a la pregunta original - GenericScreenAnimation. El método initialise() pinta una animación GIF mientras se ejecuta genericWorkerThread. Cuando genericWorkerThread finalizó, quiero mostrar una nueva pantalla. Está bien usar .join en este caso? –