"Ecco un argomento nuovo e interessante."

"Si scopre che puoi avviare discussioni in diverse modalità."

"Un programma standard (con un solo thread) interrompe l'esecuzione quando il thread principale termina il suo lavoro. Il thread principale termina l'esecuzione, il programma termina e la JVM libera la sua memoria."

"Se lanciamo un thread figlio, il programma continua a funzionare, anche se il thread principale termina. La JVM non termina finché c'è almeno un thread in esecuzione. Una volta che tutti i thread in esecuzione sono terminati, il programma si chiude."

"Beh, i programmi di grandi dimensioni hanno spesso i cosiddetti 'thread di servizio' il cui compito è servire altre parti del programma. Da soli, non sono necessari. Ad esempio: rimozione di oggetti inutilizzati (garbage collection), dump della memoria ed errori registrazione, vari rapporti sullo stato attuale del programma e così via e così via."

"Questi thread di servizio sono necessari quando il programma è in esecuzione, ma non sono necessari da soli."

"Sì, lo capisco."

"Java ti consente di eseguire un thread come daemon . Tali thread funzionano come gli altri, ma se tutti i thread non daemon in un programma sono terminati e rimangono solo i thread daemon, la JVM chiuderà il programma."

"Quindi dichiarare un thread di 'servizio' significa semplicemente che non viene considerato quando il programma viene terminato. Tutto qui?"

"Uhhhh... Beh, di sicuro l'hai detto breve e dolce. Essenzialmente, è quello che volevo dirti."

"La brevità è un talento. E i robot di talento hanno talento in tutto."

"Qualsiasi domanda?"

"Come si avvia un thread come demone? Eredita da una classe DaemonThread?"

"No, è molto più semplice di così. La classe Thread ha un metodo setDaemon(boolean). Devi solo passare true e basta. Devi solo chiamarlo prima di chiamare il metodo start(), prima che il vero thread sia creato. Non è possibile modificare il tipo di un thread dopo l'avvio dell'esecuzione."

Esempio:
Thread thread = new LoggerThread();
thread.setDaemon(true);
thread.start();

"E questo è tutto?"

"SÌ."

"Voglio attirare ancora una volta la tua attenzione sul processo di creazione e avvio di un thread."

"La creazione di un oggetto Thread non crea un thread. Un oggetto Thread non è un thread. La JVM crea un thread quando viene chiamato il metodo start(). Un Thread è un oggetto JVM speciale che consente di accedere alle informazioni su un thread e fornisce hai un po' di controllo su di esso."

"Capisco. Grazie, Ellie."