"Aqui está um tópico novo e interessante."

"Acontece que você pode iniciar threads em modos diferentes."

"Um programa padrão (com apenas um encadeamento) para de executar quando o encadeamento principal termina seu trabalho. O encadeamento principal termina a execução, o programa é encerrado e a JVM libera sua memória."

"Se iniciarmos um thread filho, o programa continuará em execução, mesmo se o thread principal for concluído. A JVM não será encerrada enquanto houver pelo menos um thread em execução. Assim que todos os threads em execução forem concluídos, o programa será fechado."

"Bem, programas grandes geralmente têm os chamados 'threads de serviço' cujo trabalho é atender a outras partes do programa. Por si só, eles não são necessários. Por exemplo: remover objetos não utilizados (coleta de lixo), despejos de memória e erro registro, vários relatórios sobre o status atual do programa e assim por diante."

"Esses threads de serviço são necessários quando o programa está em execução, mas não são necessários sozinhos."

"Sim eu entendo isso."

"Java permite que você execute um encadeamento como um daemon . Esses encadeamentos funcionam da mesma forma que os outros, mas se todos os encadeamentos não daemon em um programa forem encerrados e apenas os encadeamentos daemon forem deixados, a JVM fechará o programa."

"Portanto, declarar um segmento de 'serviço' significa apenas que ele não é considerado quando o programa é encerrado. Isso é tudo?"

"Uhhhh... Bem, você com certeza disse isso curto e doce. Essencialmente, é isso que eu queria te dizer."

"A brevidade é um talento. E robôs talentosos são talentosos em tudo."

"Alguma pergunta?"

"Como você inicia um thread como um daemon? Herda de alguma classe DaemonThread?"

"Não, é muito mais simples que isso. A classe Thread tem um método setDaemon(boolean). Você só precisa passar true e pronto. Você só precisa chamá-lo antes de chamar o método start(), antes que o thread real seja criado. Você não pode alterar o tipo de um thread depois que ele começa a ser executado."

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

"E é isso?"

"Sim."

"Quero chamar sua atenção mais uma vez para o processo de criação e início de um thread."

"Criar um objeto Thread não cria um thread. Um objeto Thread não é um thread. A JVM cria um thread quando o método start() é chamado. Um Thread é um objeto JVM especial que permite acessar informações sobre um thread e fornece você um pouco de controle sobre isso."

"Entendo. Obrigado, Ellie."