Pessoal, estava estudando threads, e me deparei com o seguinte problema:
Suponham q eu tenha uma classe assim:
[code]public class Teste
{
private static Teste instance = new Teste();
    public static Teste getInstance()
    {
            return instance;
    }
    public synchronized void metodo1()
    {
            System.out.println(Thread.currentThread().getName() + " iniciando metodo1()");
            // Faça algo
            System.out.println(Thread.currentThread().getName() + " encerrando metodo1()");
    }
}[/code]
Agora, tenho a seguinte Thread:
[code]public class ThreadTeste extends Thread
{
public ThreadTeste(String nome)
{
super(nome);
}
    public void run()
    {
            Teste t = Teste.getInstance();
            t.metodo1();
    }
}[/code]
E, finalmente, tenho a classe-teste:
[code]public class TesteMain
{
public static void main(String args[])
{
Thread t1 = new Thread("t1");
Thread t2 = new Thread("t2");
Thread t3 = new Thread("t3");
Thread t4 = new Thread("t4");
Thread t5 = new Thread("t5");
            t1.start();
            t2.start();
            t3.start();
            t4.start();
            t5.start();
    }
}[/code]
Isso, creio eu, deveria retornar blocos assim:
        t1 iniciando metodo1()
        t1 encerrando metodo1()
Entretanto, no meio da execução, ele retorna, por exempo:
        t1 iniciando metodo1()
        t2 iniciando metodo1()
        t1 encerrando metodo1()
Ora, se metodo1() ta sincronizado, pq o metodo tá sendo interrompido na metade?
Agradeço mto a paciência d analisar o problema, e abraços.
P.S. - plataforma linux