"Ciao, Amigo! Vedo che stai facendo passi da gigante nell'apprendimento dei fili."

"Non è stato poi così difficile."

È fantastico! Oggi hai una lezione facile e l'argomento è il metodo di unione .

Immagina la seguente situazione: il thread principale ha creato un thread figlio per eseguire alcune attività. Il tempo passa e ora il thread principale ha bisogno dei risultati del lavoro svolto dal thread figlio. Ma il thread figlio non ha ancora terminato il suo lavoro. Cosa dovrebbe fare il thread principale?

Buona domanda. Cosa dovrebbe fare il thread principale?

"Questo è lo scopo del metodo join . Ci consente di far aspettare un thread mentre un altro thread termina il suo lavoro:"

Codice Descrizione
class Printer implements Runnable
{
private String name;
public Printer(String name)
{
this.name = name;
}
public void run()
{
System.out.println("I’m " + this.name);
}
}
Classe che implementa l'interfaccia Runnable.
public static void main(String[] args)
{
Printer printer1 = new Printer("Nick");
Thread thread1 = new Thread(printer1);
thread1.start();

thread1.join();
}
Il thread principale crea un thread figlio – thread1 .

Quindi lo avvia chiamando thread1 .start();

E poi attende il completamento – thread1.join();

Un thread può chiamare il metodo join sull'oggetto Thread di un secondo thread. Di conseguenza, il primo thread (che ha chiamato il metodo) interrompe il proprio lavoro fino a quando il secondo thread (il cui metodo join dell'oggetto è stato chiamato) non è terminato.

Dobbiamo distinguere tra due cose qui: abbiamo un thread (un ambiente di esecuzione separato) e abbiamo un oggetto Thread.

"Questo è tutto?"

"SÌ."

"Ma perché dobbiamo creare un thread e poi aspettare subito che si completi?"

"Potrebbe non essere necessario subito. Potrebbe essere trascorso un po' di tempo. Dopo aver avviato il suo primo thread figlio, il thread principale può assegnare molte più attività ad altri thread (creandoli e chiamando il metodo start ). Quindi, quando non ha più lavoro, deve elaborare i risultati del primo thread figlio. Ogni volta che devi aspettare che un altro thread finisca di funzionare, devi chiamare il metodo join ."

"Fatto."