Chamar uma Thread ja iniciada

5 respostas
guitoneloto

Olá pessoal, eu gostaria de saber se tem alguma maneira de chamar uma Thread ja iniciada, fazer ela começar desde o 0 mais sem quer que instanciar um novo objeto.

No sistema que estou desenvolvendo tem um formulário de cadastro, nesse formulário é realizada uma pesquisa dentro de uma Theread, toda vez que realizo a pesquisa um novo objeto theread é construido, quero usar o que ja existe
Abaixo uma trecho do meu codigo

OBS:
JA TENTEI USAR O Thread.run(); até funciona mais preciso algo que rode em segundo plano e nao trave o GUI ! :frowning:

//VERIFICA SE O OBJETO JA FOI INICIADO
                if(ThBuscaCep == null)
                {
                    //CRIA A THREAD
                    ThBuscaCep = new Thread( )
                    {
                        public void run() 
                        {
                            //CONTEUDO DE BUSCA
                        }
                    };
                    ThBuscaCep.setName("TH-CEP-CadUser"); //NOME DA THREAD
                    ThBuscaCep.start(); //EXECUTA A THREAD
                }
                else
                {
                     //AQUI É O QUE NÃO SEI O QUE COLOCAR PARA CHAMAR A THREAD.
                }

ALGUEM PODE DAR UMA LUZ ??

5 Respostas

B

Não se vai ajudar, mas
vc pode usar o método

Thread  a =    new Thread();
if (!a.isAlive()){  // o Metodo retorna um booleano e caso for falso ...      
          a.start(); //EXECUTA A THREAD   
}else{
        /*
           se ela já está iniciada creio que nao tem como chamar ela novamente, poderia 
           fazer  o seguinte
           a.stop();
           a.start();
       */
}

Creio se a Thread já estiver iniciada nao tem como chamar novamente!

guitoneloto

Eu entendi, tentei fazer o que voce passou !!
eu o seguinte erro

Exception in thread "AWT-EventQueue-0" java.lang.IllegalThreadStateException
	at java.lang.Thread.start(Thread.java:682)
	at toneloto.biblioteca.AddUser.actionPerformed(AddUser.java:605)

SE não tem como chamar uma thread novamente, então vou ter que instanciar ela de novo!, mas existe algum problema em ter várias threads rodando ?, pois eu tenho uma para realizar o cadastro, uma para realizar a busca e etc… Eu também ja tentei usar o SwingWorker só que eu tive o mesmo problema !!

ViniGodoy

Se quiser reaproveitar threads, use a classe ExecutorService, que criará para você um ThreadPoolExecutor.

Entretanto, no seu caso, é mais fácil só recriar a thread mesmo.

guitoneloto

Entendi, mais quando uma theread é finalizada, ela simplesmente some ? ou continuar rodando ? e se continua rodando tem como parar ela, remover da memoria ?

ViniGodoy

Quando ela é finalizada ela para de rodar.

Não confunda duas coisas:
Existe a thread, que é a linha de execução de seu programa. Ela não ocupa memória, mesmo quando está rodando.
E existe o objeto da classe thread, que te dá informações sobre a thread que está rodando.

Esse pode ser recolhido pelo garbage collector como qualquer objeto Java existente.

Criado 25 de novembro de 2012
Ultima resposta 25 de nov. de 2012
Respostas 5
Participantes 3