Threads

O que acontece? Compila?

package teste;

public class TesteThread3 extends Thread {
  public void run() {
    System.out.println("Running");
    System.out.println("Done");
  }
  
  private void xxx() {
    System.out.println("In xxx");
  }
  
  public static void main(String[] args) {
    TesteThread3 ttt = new TesteThread3();
    ttt.xxx();
    ttt.start();
    ttt.xxx();
  }
}

Hummm
creio que:

imprime -> In xxx

depois -> Running
depois -> Done

fechando -> In xxx

Meio obvio, mas acho que está errado.

Só uma coisa é certa aki…

xxx sai primeiro…

depois que TesteThread3 é startada, tanto a Thread Main quanto ela podem assumir o controle do processador, tornando o resultado imprevisível.

Fallow.

sim, é dificil prever o que pode acontecer, mas a saida mais provavel é essa:

In XXX
Running
In XXX
Done

pq o método run() e o xxx() são lógicamente executados ao mesmo tempo… o.O
como deve ter um sincronized em algum lugar no system.out.println, acredito que seja na ordem que eu pus, pois a thread main ira esperar até que “Running” seje devidamente escrito

ou, até uma coisa que me ocorreu,
pode sair:

In XXX
In XXX
Running
Done

pq até carregar a 2ª thread, a thread main ja poderia ter escrito “In XXX” de novo