[RESOLVIDO] Esclarecimento em contrutor de thread

7 respostas
jks1903

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?

Obrigado.

7 Respostas

rmendes08

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():wink: 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.”

Código da thread:

public class Escrita extends Thread{
    
    
    @Override
    public void run(){
        /*
          implementação da thread...
        */
        }
        
    }

    public Escrita(int vlrOp) {
        start(); // NESSA LINHA OCORRE O ALERT
    }
    
    
}

Vlw.

Le_Java_Reis

jks1903

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.”

jks1903

Blza.
Obrigado pela informação.

Criado 23 de outubro de 2011
Ultima resposta 25 de out. de 2011
Respostas 7
Participantes 3