Duvida com Thread persiste :)

Pessoal eu to ficando até com vergonha de toda hora ter que fazer um post aqui no guj sobre Thread mas eu acho que eu to aprendendo…Bom a minha duvida é a seguinte. Dado o código abaixo que tava testando…

public MyThread extends Thread {

public void run(){

for(int i = 0 ; i < 4; i++)
  System.out.println(i);
}
}

public Principal{

public static void main(String ... rafa){

Thread r = new Thread(new MyThread(), "Rafael");
r.start();
System.out.println("OLA MAIN.....");

}
}

A minha duvida é a seguinte… Eu estou rodando esse codigo e so está print out 0,1,2,3 e depois OLA MAIN eu gostaria de saber se isso é garantido ou não… TIpo eu acho que não é garantido mais vale a pena perguntar para os pessoais feras aqui do GUj valew…

Raff,

realmente o comportamento nao eh garantido. Os numeros vao sempre sair em sequencia, mas voce nao consegue saber quando o OLA MAIN serah impresso.
Para fazer o teste, tente aumentar o tamanho do for. Voce vai ver que o OLA MAIN vai ser impresso entre os numeros.

É isso aí.

E, como eu falei no outro post, não adianta nem mesmo aumentar a prioridade da outra thread.
Continua sem ser garantido.

Também não adianta colocar um sleep no main e imaginar que “com a pausinha vai dar tempo do for terminar”. Pode colocar 1 hora de tempo, que continua não sendo garantido.

Via de regra, nunca confie no escalonador. Quem define que thread entra no processador é ele. E SOs diferentes tem políticas diferentes. Um pode, por exemplo, dar prioridade para a última thread disparada (numa espécie de pilha) e não dar qualquer garantia de starvation (uma thread roubar o processador para si). Outro pode ter um complexo esquema de justiça, timesharing e de quebra controlar vários núcleos, podendo iniciar diversas threads realmente em paralelo.

Você, como desenvolvedor de uma linguagem multiplataforma, nunca sabe. Especialmente agora, com micros tendo múltiplos núcleos e threads podendo efetivamente rodar em paralelo. Sem usar um mecanismo formal de sincronização e espera, nada é garantido.

Valew ai pessoal obrigado novamente :smiley: