Problema com threads (requer paciência - mto código =P)

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

Cara, como o método está sincronizado realmente ele deveria aparecer as sequencias “iniciando metodo1()” e “encerrando metodo1()” e não intercalar.
Você tem certeza que não tem algum erro no código?
Você usou exatamente o código que você postou aqui?
Pq se foi, tem um erro no código e não era para aparecer nada na saida do seu programa. Dá uma olhada aqui…

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(); 
        } 
}

Você está criando instâncias da classe Thread e não da sua classe ThreadTeste.

Dá uma conferida se você não está fazendo nada de errado…

Abraço

Ih cara, eu tô instanciando ThreadTeste mesmo, é pq postei com pressa o código…
Corrigindo:

[code]public class TesteMain
{
public static void main(String args[])
{
ThreadTeste t1 = new ThreadTeste("t1");
ThreadTeste t2 = new ThreadTeste("t2");
ThreadTeste t3 = new ThreadTeste("t3");
ThreadTeste t4 = new ThreadTeste("t4");
ThreadTeste t5 = new ThreadTeste("t5");

            t1.start();
            t2.start();
            t3.start();
            t4.start();
            t5.start();
    }

}[/code]
Eu usei exatamente o mesmo código q aqui, omitindo alguns q eu substituí pelo comentário “// Faça algo”
Apliquei o Singleton só pra ter certeza q estamos falando do mesmo objeto.
Abraços

Olá
Por favor, tranquem este tópico… :oops:
Executei o mesmo exemplo sem o código omitido pelo comentário, e deu certo. Ele executava um número de conexões ao banco d dados e armazenava numa pilha (Stack). Talvez esse processo interrompa outras threads em execução, ou algo semelhante…
D qq maneira, obrigado pela atenção.