Questao thread

7 respostas
F

class Class { public Class() { } public static void main(String[] args) { Thread t = new Thread(); t.start(); t.start(); } }

galera , tava dando uma olhada em threads e essa questao me fez uma duvida…
Primeiro,
o q acontece se eu rodar esse código ???

Depois eu queria modificar o programa em uma linha pra entender como a thread se comporta…

Valeu!!!

7 Respostas

R

Olá!!!

Aqui no portal java tem um tutorial muito bom sobre threads. Não dá pra explicar em uma resposta o funcionamento do mecanismo.

Procura lá na seção de tutoriais, vc não vai se arrepender…

E só pra constar, esse código que vc escreveu, só ele… não faz nada. =)

Abraços!

F

aqui deu erro de run-time!

mas naum eh garantia de ocorrer esse erro.

D

“fmartins”:
aqui deu erro de run-time!

mas naum eh garantia de ocorrer esse erro.


Acho q é garantido sim, o thread morto nao pode ser iniciado novamente, senão da um erro em tempo de execução, mas seus metodos podem ser usados normalmente.
:cool:

F

Na verdade ele vai lançar um IllegalThreadStateException, pois vc está tentando alterar o estado de um Thread pro mesmo estado

F

naum naum cara …
isso vai depender do tempo q seu processador vai executar a pilha do segmento t, se ele terminar a tempo, vc pode chamar de novo o metodo start,

por exemplo … se vc forcar pra q a thread execute e volte pra o estado de finalizado, vc vera q ele naum lancara essa excecao …

class Class { public Class() { } public static void main(String[] args) { Thread t = new Thread(); t.start(); try{ Thread.sleep(5000); }catch(InterruptedException e){ e.printStackTrace(); } t.start(); } }

agora q teve tempo, naum lancará a excecao , essa questao EH IMPREVISIVEL … vc naum sabe o tempo q vai durar a execucao de “t”

Ps.: Rodei na maquina em casa … gerou a excecao …
la no trabalho … q o processamento de testes eh um pouco mais lento …
naum gerou absolutamente nada!!!
nao sei se esse tipo de questao cai no exame, se tiver alguem q possa dizer …
eh isso galera… e vamos postar!!!
:grin:

F

entendi cara, valew, é verdade! é impossivel saber se qdo chamar o novo start ele já não está no estado de pronto novamente

F
o thread morto nao pode ser iniciado novamente

isso isso !!!!

o ciclo de vida de um thread eh o seguinte

|NOVO| -----> |EXECUTAVEL| <---> |EXECUCAO|----> |INATIVO|
                   /|\                   /
                     \                  /
                       \              /
                         \          /
                           \    \|/
                        |ESPERA,BLOQUEIO|

Qdo a thread está em execucao não pode tentar chamar o metodo start.
soh qdo esta em INATIVO, qdo ja esta morta, vc pode mas mesmo assim naum sera criado um novo ciclo ... nunca

um exemplo disso está a seguir ... se vc tentar rodar esse codigo vera q soh vai imprimir uma vez "teste"...
class Class  {
  public Class() {
  }
  public static void main(String[] args) throws Exception {
  
    MyThread t = new MyThread();
    t.start();
    t.sleep(1000);
    t.start();
  }
}

class MyThread extends Thread{
  public void run(){
    System.out.println("teste");
  }
}

Abraços!

Criado 28 de fevereiro de 2005
Ultima resposta 1 de mar. de 2005
Respostas 7
Participantes 4