Dúvida em Relação a Threads

Eu tenho a seguinte classe:

public class Teste{

public void fazAlgumaCoisa() {
//corpo do metodo
}

public void fazOutraCoisa() {
//corpo do metodo
}

}

Como eu faço para criar uma thread que fique rodando somente o metodo fazAlgumaCoisa() e outra thread que só rode o metodo fazOutraCoisa()?

Boa Noite!

Acho que o meio mais simples seria algo do tipo:

Thread fazAlgumaCoisa = new Thread(new Runnable() {
	public void run() {
		// fazAlgumaCoisa
	}
});

Thread fazOutraCoisa = new Thread(new Runnable() {
	public void run() {
		// fazOutraCoisa
	}
});

fazAlgumaCoisa.start();
fazOutraCoisa.start();

Mas você também pode criar uma classe específica para essas threads…:

public class FazAlgumaCoisa extends Thread {
        FazAlgumaCoisa() {
                // Construtor
        }

	public void run() {
		// fazAlgumaCoisa
	}
}

Depois iniciá-la com:

FazAlgumaCoisa tarefa = new FazAlgumaCoisa();
tarefa.start();

Valeu

Boa Noite, obrigado pela resposta mas como eu faria para acessar os outros metodos da minha classe teste?

Bom, no Java tem tantas maneiras de fazer uma coisa, que eu fico sem saber qual é a correta às vezes =P

No primeiro exemplo que eu passei anteriormente, este bloco de código seria colocado no método main da classe Teste, por exemplo. Desta forma, seria possível chamar os métodos da classe Teste normalmente.

Então, eu deduzo que você tenha criado uma classe nova, correto? Acho que o único jeito de você acessar algum método da classe Teste, de fora desta classe, seria com os métodos static…

public class Teste {
    public static void metodoDaClasseTeste() {
    // Faça algo
    }
}
public class Threads extends Thread {
    public void run() {
    Teste.metodoDaClasseTeste(); // Seria uma chamada direta ao método da classe...
    }
}

É o único modo que consigo pensar em fazer isso o.O Não sei se é o jeito certo POO’mente falando mass…

Se for usar muitos métodos assim, talvez seria melhor acharmos um jeito de fazer essa thread direto na classe Teste… como aquele primeiro exemplo que eu passei…

Valeu

static e threads são coisas que praticamente não combinam.

De qualquer forma, você pode fazer assim:

[code]public class Teste{
public void fazAlgumaCoisa() {
//corpo do metodo
}

public void fazOutraCoisa() {
//corpo do metodo
}

public static void main(String[] args) {
final Teste teste = new Teste();

  //Dispara uma segunda thread rodando fazAlgumaCoisa().
  new Thread(new Runnable() {
     public void run() {
        teste.fazAlgumaCoisa();
     }
  }).start();

  //Dispara uma thread rodando fazOutraCoisa().
  teste.fazOutraCoisa();

}
}
[/code]

Só é bom lembrar que, como existem duas threads percorrendo o mesmo objeto, pode haver problemas ao acessar dados da região crítica. Isto é, sem sincronização adequada, você pode ter sérios problemas.

Voce pode tambem fazer injeção do seu objeto Teste na classe que extende a Thread pra evitar o estatico. Mas ai voce vai ter que ter um bom conhecimento de Thread pra evitar problemas de duas threads fazendo o acesso ao objeto Teste.

Opa, obrigado pessoal. Vini, desse jeito que você fez funciona também com 3, 4, 5, n metodos certo?

Com quantos você quiser.