Oi gente, tudo bem?
Será que voce poderiam me explicar porque a saída do programa abaixo é mais ou menos assim?
teste2
teste2
teste2
teste2
teste2
teste2
teste2
teste2
teste2
teste2
teste2
teste2
teste2
teste2
teste2
teste2
teste1
teste1
teste1
teste1
teste1
teste1
teste1
teste1
teste1
teste1
teste1
teste1
teste1
teste1
teste1
Pelo que eu entendi desse códico, as saídas não deveriam ser alternadas?
teste1
teste2
teste1
teste2
teste1
teste2
teste1
teste2
teste1
teste2
teste1
teste2
teste1
teste2
teste1
teste2
não sei se estou falando besteira, mais threads são aleatórias…
S
Sem_Nome
Meu conhecimento em Threads é muito limitado (por enquanto) mas até aonde eu sei é a JVM quem decide qual thread será executada em tempo de execução. Não tem como você “prever”.
L
LaraBertini
Mas como a cada iteraçao do for da trhead2 ela executa uma chamada a wait(), eu pensei que ela ficaria inativa até que uma iteração do for da trhead1 fosse executado e notificasse a tread2…
for(inti=0; i < 1000; i++) { System.out.println("teste2"); try{wait(); }catch(Exceptione){}}
for(inti=0; i < 1000; i++) { System.out.println("teste1"); try{t2.notify(); //wait(); }catch(Exceptione){}}
Mas então a thread ser notificada não implica em ela ser necessariamente executada no instante em que foi notificada?
Ela simplesmente entra na fila de processos prontos a serem executados?
Para que wait() e notify() funcionem você precisa usá-los dentro de um bloco synchronized{}. Além disso, o controle deve ser feito através de um objeto chamado de monitor, que é quem controla a entrada da thread na região crítica.