Mais de uma Thread na classe

Galera, tem como usar mais de uma Thread em uma classe ? Pois estou usando Thread para realizar buscas no banco de dados, mais tem varias buscas na classe e a unica maneira que sei fazer é o doe exemplo abaixo


public class Login implements Runnable 
{
   public Login ()
   {
         Thread Login = new Thread(new Login());
         Login.start();
   }
   public void run()
   {
 //FAZ AS BUSCAS
   }
}

Assim como vc instanciou a thread login, pode instanciar outras:

Thread login = new Thread(new Login());
Thread t2 = new Thread(new Login());
Thread t3 = new Thread(new Login());

login.start();
t2.start();
t3.start();

Mas é importante que você leia sobre isso. Paralelismo, programação concorrente, pode se tornar algo difícil de gerenciar.

Disso eu sei mais quero fazer algo +/- assim
Quero evitar que o Swing trave ao executar algum comando em sql.

public void Login ()
{

}

public void Cadastro ()
{


}

login.start;
Cadastro.start;

Quem quer usar threads em Swing normalmente usa um SwingWorker. A vantagem de usar um SwingWorker é que existem métodos já prontos para você indicar o progresso da execução da tarefa (ou seja, se sua tarefa é longa mas pode ser dividida em pedaços, você pode atualizar um Progress Bar de forma relativamente simples) e também para você cancelar a execução de algo que está muito demorado.

Veja mais detalhes em:

http://docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.html

(Você precisa ler as páginas seguintes a essa também, é claro. Em caso de dúvidas com o inglês, use o Google Translator. )

Olá entanglement, Eu comecei a usar o SwingWorker, estou tendo pouca dificuldade mais ja está atendendo as minas nescessidades, pois a aplicação travava quando dava algum erro no Socket e no Mysql ou quando a conexao estava muito lenta…

Abaixo esta meu código que implementei em uma janela que faz a autenticação do usuário, seria desta forma que eu poderia usar o SwingWorker ?



public void Autentica                   ()
    {
        try 
        {  
            new SwingWorker() 
            {  
                protected Object doInBackground() throws Exception 
                {  
                    try 
                    {  
                            
                        //faz a conexao ao banco de dados
                        ConectaDb();
                        System.out.println("TENTANDO AUTENTICAR USUÁRIO");
                            //string com o comando em sql
                            String sqlBuscaLogin = "SELECT Perfil.PerfilRegistro, Perfil.PerfilPNome, Perfil.PerfilSNome, Perfil.PerfilMsgPessoal, Perfil.PerfilEmail, Perfil.PerfilRg, Perfil.PerfilDtNasc, Perfil.PerfilCep, Perfil.PerfilFoto, Perfil.PerfilUser, Perfil.PerfilSenha, "
                                    + "Conexao.ConRegistro, Conexao.ConUser, Conexao.ConPorta, Conexao.ConIp "
                                    + "FROM Perfil "
                                    + "INNER JOIN Conexao ON Perfil.PerfilRegistro = Conexao.ConUser "
                                    + "WHERE `PerfilUser` = '" + jUser.getText() + "' AND `PerfilSenha` = '" +  jSenha.getText() + "'";
                                    //+ "SELECT * FROM `Perfil` WHERE `PerfilUser` = '" + jUser.getText() + "' AND `PerfilSenha` = '" +  jSenha.getText() + "'";
                            try
                            { 
                                //executa o sql
                                ResultSet RBU = getDBStm().executeQuery(sqlBuscaLogin); 
                                //se existir algum usuário é executado o if abaixo
                                if (RBU.next())
                                {
                                    //retoma o primeiro nome do usuário
                                    setUserPNome     (RBU.getString  ("Perfil.PerfilPNome"));
                                    //retorna o segundo nome do usuário
                                    setUserSNome     (RBU.getString  ("Perfil.PerfilSNome"));
                                    //retorna a mensagem pessoal do usuário
                                    setUserMPessoal  (RBU.getString  ("Perfil.PerfilMsgPessoal"));
                                    //retorna o email do usuárop
                                    setUserEmail     (RBU.getString  ("Perfil.PerfilEmail"));
                                    //retorna meu id de registro
                                    setUserRegistro  (RBU.getInt     ("Perfil.PerfilRegistro"));
                                    //adiciona dados de conexao
                                    AddConexao       ();
                                
                                }
                                //caso não encontre o usuario no banco de dados
                                else
                                {
                                    //Mostra mensagem ao usuário
                                    Logando(false);
                                    JOptionPane.showMessageDialog(null, "ATENÇÃO USUÁRIO\nUSUÁRIO NÃO ENCONTRADO", "Atenção", JOptionPane.DEFAULT_OPTION);
                                }
                            }
                            catch(Exception ex)
                            {
                                //exibe advertencia em caso de erro ao tentar efetuar o login
                                JOptionPane.showMessageDialog(jLogin, "ERRO AO TENTAR REALIZAR LOGIN\nERRO:1-0001", "Atenção", JOptionPane.ERROR_MESSAGE);
                                System.out.println("ERRO AO REALIZAR BUSCA DE LOGIN\nERRO: " + ex);
                            } 
                    } 
                    catch (Exception ex) 
                    {  

                    }  
                    return null;  
                }  
                protected void done() 
                {  
                    //System.out.println("haaaassd");  
                }  
            }.execute();