Pessoal, estou estudando threads e implementando meus primeiros exemplos com o NetBeans.
em determinado momento eu quis iniciar a thread no instante em que a mesma fosse construída, porém o NetBeans exibiu um alert, informando que era uma prática perigosa. Porém não encontrei uma explicação.
Alguém poderia me dizer o porquê que “não posso” iniciar uma thread em seu método construtor?
To achando interessante a sua dúvida, mas posta o código pra ficar mais claro.
Le_Java_Reis
Boa Tarde jks1903;
Você “pode sim” iniciar uma Thread em seu construtor não se torna uma boa prática devido o não uso de variáveis de referência impossibilitando o uso do encapsulamento,polimorfismo e ainda mais no caso de Threads devido a mesma fazer uso da referência ao objeto Thread() para invocação de métodos importantes(join();…) e o iniciar(start() uma Thread utiliza a unica instância que se refere a Thread em execução…
Espero ter ajudado em algo, bons estudos.
Leandro Reis
jks1903
Bom, assim.
Como estou no início dos estudos fiz o seguinte.
Criei duas threads que alteram o valor de determinada variável.
Uma soma e outra diminui.
Aí, lá no main, eu instancio as threads e em seguida iniciava a execução das mesmas.
Para não ser necessário implementar o start no main, eu fiz isso no construtor de cada thread. Porém não há erro de execução nem compilação, apenas um alert.
Dizendo o seguinte:
“Starting a new Thread in constructor is dangerous and should be prevented.”
Cara eu pensei que você estivesse invocando o método start() na instanciação do objeto o que ja seria descuidado :), pior ainda iniciando um Thread em um construtor devido ao construtor muitas das vezes ser invocado fora de um estado de percepção do programador(sendo invocado por exemplo na execução de uma classe estendida), usado a maneira que esta sim uma classe para estudos um pedaço de código pequeno(dentro de um estado de percepção),mas imagine esta classe(extends Thread) controlando o fluxo de débitos da sua conta e uma classe para verificar o saldo estendendo a classe que cuida dos débitos utilizando a mesma para saber sobre débitos feitos e essa mesma classe a cada vez que fosse verificar o saldo ela debitasse valores em sua conta(tudo isso metaforicamente claro…) rapidamente lembraríamos de ter escutado nosso amigo compilador.
Fora muitos mais outros problemas podem ser causados inciando tipos de eventos no construtor utilizando a referência this do objeto.
Espero ter ajudado um pouco.
Bons estudos.
Ah! Parabéns ao NetBeans hehe:)
OBS.: So por curiosidade qual é a versão da IDE?
Leandro Reis
jks1903
Le Java Reis,
ajudou sim. Entendi os riscos dessa prática, rsrs.
E sobre o NetBeans, estou usando a versão 7.0
Vlw pela ajuda.
Le_Java_Reis
Por nada se sentir ter resolvido o seu problema coloque ao lado do titulo do tópico [RESOLVIDO].
“A dúvida com certeza é a dúvida de muitos. Exponha sua ideia GUJ.”