Dúvida sobre instâncias de Thread's em Java [Resolvido]

Pessoal, em uma rotina exemplo como esta:

for(int i=1; i<=2; i++){ threadJava processo = new threadJava(); processo.start(); }

A nova thread criada vai sobrepor & anular o andamento da antiga imediatamente assim que instânciado o novo objeto nessa mesma variável “processo”, ou vai continuar em execução em outro espaço de memória até o seu término, ou seja, cria duas ou mais instâncias operacionais em andamento, independente de estar na mesma variável?

Varias

Ela vai continuar executando.
a Variavel serve apenas para você instanciar as caracteristicas da Thread e inicia-la…
Deveria acontecer isso pelo menos, mas aconselho voce a terminar a Thread.
Pode ser que ocorra erros de Threads (bem comuns)

Vai criar duas threads em andamento.

Tenha em mente que existem duas coisas distintas:

a) Uma variável que descreve uma thread em andamento (no caso, a variável processo, filha de threadJava);
b) Uma thread em andamento.

O que você está trocando aí é o endereço da variável que descreve a thread. A thread disparada no start() vai continuar rodando até que o seu método run() termine, independente de você ter guardado o objeto que descreve o seu estado ou não.

Então, em um caso de várias threads, qual a melhor forma de verificar e parar a instância antiga para poder iniciar uma nova? (evitando erros de execução paralela de threads)

Vá em C:\Arquivos de programas\Java\jdk1.6.0_16\bin e execute o jconsole. Lá você poderá verificar as thread’s que estão sendo executadas(para isso execute o jconsole quando o programa já estiver rodando e conecte-se com o mesmo). Não sei ao certo, mas provavelmente ele criará outra sem problemas, mas na hora de você trabalhar com a thread pode dar erro, ou dar um resultado inesperado, uma vez que as thread’s estão na mesma variável(processo).

geralmente eu uso Thread.sleep();

Mas sleep() não muda o fato dela estar criada ou não, pq depois ela vai “acordar” e continuar sendo executada, não?

Se voce quer eliminar ela completamenta da um interrupt()
e um destroy()

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Thread.html

[quote=Scoobydoo]Se voce quer eliminar ela completamenta da um interrupt()
e um destroy()
[/quote]

Você só esqueceu de dizer que o destroy() é um método deprecated. Ele deixa a aplicação instável, gera leaks e deve ser evitado a todo custo.

Se você quiser parar uma thread, você deve programa-la para ser parável. O método interrupt() apenas envia um sinal para a thread, dizendo que ela deve ser parada. Isso fará com que todos os sleeps e waits lancem uma interruptedException e que a variável Thread.interrupted() passe a valer true.

É você que tem que desviar o fluxo de sua thread para fora do run() nessa situação. E, obviamente, é impossível enviar um interrupt para a primeira thread criada nesse seu laço, já que você perdeu totalmente o objeto da classe Thread dela. Nesse caso, guarde os vários objetos criados num array.

Se você quiser esperar uma thread terminar de executar, use o método join(). Esse método irá congelar a execução da aplicação até que a thread termine.

Ok, dúvida resolvida!

Valeu pela ajuda pessoal!