A JVM deixa cada thread rodar um tempo e a paralisa para executar outra. Você não tem controle de que trecho será executado antes sem utilizar sincroninazação.
Ou seja: se você rpecisa obedecer a uma ordem de eventos deve continuar estudando para aprender a utilizar monitores, barreiras, wait/notify, etc.
O método synchronized garante que duas threads não acessarão ao mesmo tempo o mesmo objeto. Quantas vezes você usa o new? duas. Então, você tem duas threads, acessando objetos diferentes. Como elas estão em blocos sincronizados de objetos diferentes, não há problema em que elas acessem esses blocos ao mesmo tempo. Tem mais detalhes no tópico que eu te passei.
Ainda sim, o seu exemplo é bastante infeliz. O bloco message é syncronized, mas o run não. Então, nada impede que, mesmo compartilhando o mesmo objeto, haja troca de threads entre as duas chamadas de message.
cara isso é uma pegadinha, seus threads tem destino diferentes… observe que é criado um novo objeto em cada threads… e nao o mesmo destino que a thread anterior… a sincronização so afeta quando threads possui o mesmo destino… threads com destino diferentes… a sincronização nao bloqueia uma a outra. a kathy fala isso… dar uma lida bem devagar nessa parte das regras de threads… heheh
class Seliga implements{
public void run(){
casco();
}
synchronized void casco(){
System.out.println(Thread.currentThread().getName());
}
public static void main(String ar[]){
//aqui vc tem um new destino para esse objeto thread
Thread t = new Thread(new Seliga());
//aqui eu tenhi outro objeto thread que tem outro objeto
//com outro destino
Thread t2 = new Thread(new Seliga());
//os objetos usados para destino sao novos objetos de destino
//apesar de ser da mesma class, ambos nao bloqueia um ao outro
//devido ser objetos diferentes.
t.start();
t2.start();
vc lembra que a kathy fala : “para ter um bloquei o destino deve ser o mesmo” entao objetos diferente nunca vai bloquear um ao outro… ja que ambos tem destino diferentes… viaje nisso agora: " vc e seu amigo vai vem para Bahia, um vem via mar e outro via terrestre… como um vai bloquear o outro se os caminhos eh diferentes, porem o destino é o mesmo" é ± isso que acontece… sacow… acho q viajei ai… mais… tentei explicar mais simples possivel…
obs.: synchronized so funciona quandos multiplos threads tem o mesmo destino.